Django: Fremdschlüssel mit Integer setzen?
Gibt es eine Möglichkeit, Fremdschlüssel-Beziehung mit der integer-id ein Modell??? Dies wäre für die Optimierung Zwecke.
Angenommen, ich habe ein Mitarbeiter-Modell:
class Employee(models.Model):
first_name = models.CharField(max_length=100)
last_name = models.CharField(max_length=100)
type = models.ForeignKey('EmployeeType')
und
EmployeeType(models.Model):
type = models.CharField(max_length=100)
Möchte ich die Flexibilität, unbegrenzt Mitarbeiter-Typen, aber in der implementierten Anwendung wird es wahrscheinlich nur eine einzige Art, so Frage ich mich, ob es einen Weg gibt, zu fest die id und die Beziehung auf diese Weise. Auf diese Weise kann ich vermeiden, ein db-Aufruf, um die EmployeeType Objekt zuerst.
InformationsquelleAutor der Frage User | 2010-05-17
Du musst angemeldet sein, um einen Kommentar abzugeben.
Yep:
ForeignKey
Felder speichern Ihren Wert in einem Attribut mit_id
am Ende, die Sie direkt zugreifen können, um zu vermeiden Besuch der Datenbank.Den
_id
version einesForeignKey
ist ein besonders nützlicher Aspekt des Django, eines, das jeder kennen sollte, und von Zeit zu Zeit nutzen, wenn angemessen.Einschränkung:
@RuneKaagaard weist darauf hin, dass
employee.type
ist nicht genau danach in den letzten Django-Versionen, sogar nach dem aufrufenemployee.save()
(er hält seinen alten Wert). Mit wäre es natürlich die Niederlage der Zweck der oben genannten Optimierung, aber ich würde lieber eine versehentliche zusätzliche Abfrage nicht mehr korrekt. Also seien Sie vorsichtig, verwenden Sie nur diese, wenn Sie fertig sind arbeiten, die auf die Instanz (zBemployee
).InformationsquelleAutor der Antwort Will Hardy
Alternative, die verwendet erstellen um das Objekt zu erstellen, und speichern Sie die Datenbank in einer Zeile:
InformationsquelleAutor der Antwort Jacinda