2016-07-30 94 views
0

我有兩個型號:Django的模場從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) 

如何使一個變量baz是從FirstModel.foo

我希望它是那麼容易,因爲:

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

終極目標:要的SecondModelsecond_model_instace.foo一個實例得到foo

回答

3

您可以在落後的參考鏈接模型中使用related_name

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) 

現在你可以,如果存在鏈接否則你將得到DoesNotExsist異常作爲first_model_intance.baz訪問。該default是:

如果不指定OneToOneField的related_name說法, Django會使用目前的模式爲默認值 的小寫名稱。

更新: 如果你想獲得second_model_instace.foo,你甚至不需要related_name(向後引用)。它是前向參照,這已經是明確的。首先得到first_model(通過OneToOne場),然後將其屬性foo,那就是:

second_model_instance.bar.foo 
+0

謝謝你,我很清楚這一點。我並不清楚我想要什麼。我要更新這個問題。我想要的是能夠做到:'second_model_instance.foo'來獲得foo。 – Tsangares

+0

@Tsangares我已經更新了答案。那是你在找什麼? – DurgaDatta

相關問題