2016-07-30 8 views
0

Ich habe zwei Modelle:Django Modell Feld von OneToOneField

class FirstModel(models.Model): 
    foo = models.IntegerField(default=0) 
class SecondModel(models.Model): 
    bar = models.OneToOneField(FirstModel, on_delete=models.CASCADE, primary_key=True) 

Wie kann ich eine Variable, die von bazFirstModel.foo ist?

Ich wünschte, es wäre so einfach wie:

class SecondModel(models.Model): 
    bar = models.OneToOneField(FirstModel, on_delete=models.CASCADE, primary_key=True) 
    baz = bar.foo 

ultimative Ziel: Um foo von einer Instanz von SecondModel wie second_model_instace.foo zu bekommen.

Antwort

3

Sie können related_name in der Verknüpfung Modell für die Rückwärts Referenz verwenden:

class FirstModel(models.Model): 
    foo = models.IntegerField(default=0) 
class SecondModel(models.Model): 
    bar = models.OneToOneField(FirstModel, ,related_name'baz', on_delete=models.CASCADE, primary_key=True) 

Jetzt können Sie als first_model_intance.baz zugreifen, wenn der Link sonst existiert, wird Sie DoesNotExsist Exception. Die default ist:

Wenn Sie angeben, nicht das related_name Argument für die OneToOneField, Django wird den Kleinen Namen des aktuellen Modells als Standard Wert verwenden.

Update: Wenn Sie second_model_instace.foo erhalten möchten, Sie brauchen noch nicht einmal related_name (Rückwärts-Referenz). Es ist Vorwärtsreferenz, die bereits explizit ist. Zunächst erhalten die first_model (via OneToOne Field) und dann sein Attribut foo, das heißt:

second_model_instance.bar.foo 
+0

Vielen Dank, ich war sich dessen bewusst. Ich war nicht explizit mit dem, was ich wollte. Ich werde die Frage aktualisieren. Was ich will ist in der Lage zu tun: 'second_model_instance.foo' um foo zu bekommen. – Tsangares

+0

@Tsangares Ich habe die Antwort aktualisiert. Haben Sie danach gesucht? – DurgaDatta