2015-09-04 94 views
0

在Django的1.8如何獲得ForeignKey的模型字段

class OtherModel(models.Model): 
    somefield = models.CharField(max_length=20) 

class Orderform(models.Model): 
    sell_item_id = models.CharField(max_length=20) 

class Selled(models.Model): 
    orderform = models.ForeignKey("Orderform") 
    sell_count = models.IntegerField() 
    something = OtherModel.objects.get(id=sell_item_id) 

我需要使用類似OtherModel.objects.get(id=sell_item_id)

如何獲得sell_item_idclass Selled(models.Model):

+0

參考[doc](https://docs.djangoproject.com/en/1.8/topics/db/examples/many_to_one/#many-to-one-relationships) – taesu

+0

什麼是「OtherModel」? –

+0

不使用ForeignKey模型 – Squallcx

回答

1

您的模式無法在SQL中呈現。

選項#1:

class Orderform(models.Model): 
    sell_item_id = models.CharField(max_length=20) 
    othermodel = models.OneToOneField("OtherModel") 

,並得到它

Selled.objects.get(pk=1).orderform.othermodel 

選項#2:

class Selled(models.Model): 
    orderform = models.ForeignKey("Orderform") 
    sell_count = models.IntegerField() 

    def something(self): 
     return OtherModel.objects.get(id=self.sell_item_id) 

,並得到

Selled.objects.get(pk=1).something() 

但我認爲你應該更好地考慮你的DB架構。

0

它看起來像你有幾個問題,第一個,sell_item_id之前得到相關

Selled.objects.filter(order_form__sell_item_id =id_to_get).select_related('order_form') 

通知的__(雙下劃線)。這很重要,因爲它說,OrderFormSelleed,sell_item_id。並select_related確保訂單形式帶回到數據庫的結果中。

現在,如果您想要爲OtherModel這麼做,您需要在OtherNodel中創建一個類似的ForeignKey字段,這將允許您進行與上述相同的查詢。目前,你沒有這種關係。

class OtherModel(models.Model): 
    somefield = models.CharField(max_length=20) 
    orderform = models.ForeignKey("Orderform") 

OtherModel.objects.filter(order_form__sell_item_id =id_to_get).select_related('order_form') 

不要忘記運行:

python manage.py makemigration 
python manage.py migrate 

這應該解決的問題。

相關問題