2013-10-30 84 views
0

我無法查詢django模型。Django模型id問題

該模型如下。

class DeviceLevelMapping(models.Model): 
    device = models.ForeignKey(DeviceDetails) 
    level1 = models.ForeignKey('Level1Detail') 
    level2 = models.ForeignKey('Level2Detail') 
    level3 = models.ForeignKey('Level3Detail') 
    level4 = models.ForeignKey('Level4Detail') 
    level5 = models.ForeignKey('Level5Detail') 
    level6 = models.ForeignKey('Level6Detail') 
    level7 = models.ForeignKey('Level7Detail') 
    class Meta: 
     db_table = 'device_level_mapping' 

當我火了查詢DeviceLevelMapping.objects.filter(level1_id = l_id)unknown column DeviceLevelMapping.id`說。

問題在哪裏?

EDITED

class Level1Detail(models.Model): 
    level1_id = models.IntegerField(primary_key=True) 
    level1_name = models.CharField(max_length=256L) 
    organization = models.ForeignKey('OrganizationDetails') 
    class Meta: 
     db_table = 'level1_detail' 

回答

1

正如很多人指出的那樣,level1_id笑可能是level1__id,但這不會引起未知的columnDeviceLevelMapping.id錯誤。

根據模型的結構和db_table定義,我猜db table並不是由Django syncdb創建的,它是從現有項目遷移而來的,並且沒有主鍵。

Django模型有automatic primary key field,默認字段名稱是 'ID'

最簡單的辦法:ALTER TABLE device_level_mapping,添加一個名爲id列。

+0

但是,這個ID將不需要在任何地方。這是解決問題的正確方法嗎? ? – PythonEnthusiast

+0

主鍵在後端隨處可見,由django orm使用。 –

+0

好的。我會爲它創建一個ID。如果我有任何錯誤,會回覆給你。謝謝 – PythonEnthusiast

4

要按照查詢中使用__(雙下劃線)的關係。

從您的更新idlevel1_id,所以查詢應改爲

DeviceLevelMapping.objects.filter(level1__level1_id = l_id) 
+0

現在它說'無法解析關鍵詞「ID」到現場。選擇是一些xyz'。現在有什麼問題? – PythonEnthusiast

+0

@ user1162512,你是否將'Level1Detail'改爲'id'字段?向我們展示該模型的代碼。 – Rohan

+0

你甚至可以在跳到結論之前閱讀OP的錯誤信息 –

0

你查詢一個ForeignKey這樣遍歷的關係,它的雙下劃線(或dunders)__

將您的查詢改爲

DeviceLevelMapping.objects.filter(level1__id = l_id) 
0

您的查詢應該是這樣的:

 
DeviceLevelMapping.objects.filter(level1__level1_id = l_id) 
+0

它仍然顯示我同樣的錯誤。任何想法。? – PythonEnthusiast

+0

你會在你的問題中包含錯誤日誌嗎? –

+0

它說'數據庫錯誤:(1054,「字段列表'中的'未知列'device_level_mapping.id')' – PythonEnthusiast