Django: Définit la clé étrangère à l’aide d’un entier?

Existe-t-il un moyen de définir une relation de clé étrangère à l’aide de l’identifiant entier d’un modèle? Ce serait à des fins d’optimisation.

Par exemple, supposons que je dispose d’un modèle d’employé:

class Employee(models.Model): first_name = models.CharField(max_length=100) last_name = models.CharField(max_length=100) type = models.ForeignKey('EmployeeType') 

et

 EmployeeType(models.Model): type = models.CharField(max_length=100) 

Je veux avoir la flexibilité d’avoir des types d’employés illimités, mais dans l’application déployée, il y aura probablement un seul type, alors je me demande s’il existe un moyen de coder en dur l’identifiant et de définir la relation de cette manière. De cette façon, je peux éviter un appel de firebase database pour obtenir l’object EmployeeType en premier.

Oui:

 employee = Employee(first_name="Name", last_name="Name") employee.type_id = 4 employee.save() 

ForeignKey champs ForeignKey stockent leur valeur dans un atsortingbut avec _id à la fin, auquel vous pouvez accéder directement pour éviter de visiter la firebase database.

La version ForeignKey un ForeignKey est un aspect particulièrement utile de Django, que tout le monde devrait connaître et utiliser de temps en temps, le cas échéant.

caveat:

@RuneKaagaard souligne que employee.type n’est pas précis dans les versions récentes de Django, même après avoir appelé employee.save() (il contient son ancienne valeur). Son utilisation irait à l’encontre de l’objective de l’optimisation ci-dessus, mais je préférerais qu’une requête supplémentaire accidentelle soit incorrecte. Alors soyez prudent, ne l’utilisez que lorsque vous avez fini de travailler sur votre instance (par ex. employee ).

Une alternative utilisant create pour créer l’object et l’enregistrer dans la firebase database en une seule ligne:

 employee = Employee.objects.create(first_name='first', last_name='last', type_id=4)