所以我用在Django與下面的類繼承:Django的objects.all查詢集不從數據庫返回的所有對象
class main_menu(node):
"""
main_menu(node)
Has no extra fields. All children of the root node must
be main_menu nodes
"""
# Required for tree hierarchy to work (db_column='path' for raw queries)
_path1 = models.CharField(db_column='path', max_length=Global.MAX_FILE_PATH_LENGTH, unique=True);
main_menu_blah = models.CharField(max_length=30, default='');
def __unicode__(self):
return self.main_menu_blah;
MAIN_MENU
class language(main_menu):
"""
language(main_menu)
Main menu used specifically for a main menu targetted
at a speaker of some language.
"""
# Required for tree hierarchy to work
_path2 = models.CharField(db_column='path', max_length=Global.MAX_FILE_PATH_LENGTH, unique=True);
language_blah = models.CharField(max_length=30, default='');
def __unicode__(self):
return self.language_blah;
語言
class language2(language):
_path3 = models.CharField(db_column='path', max_length=Global.MAX_FILE_PATH_LENGTH, unique=True);
language_blah2 = models.CharField(max_length=30, default='');
現在,我可以插入訪問所有這些模型就好。我也可以使用.objects.get(...)來獲取它們。
但是,如果我從父類表中刪除一行(例如語言是language2的父語言),那麼我無法從language2表中獲取()最後一行。我執行 subNode = language2.objects.get(_path3 =);
我總是得到以下錯誤:
DoesNotExist
LANGUAGE2匹配查詢不存在的。
我查看了數據庫(sqlite),我可以看到最後一個條目在列_path3中。此外,我可以使用原始查詢(使用connection.cursor()),我可以得到最後一行。但它只是原始數據,我需要一個模型對象。哦,並使用.extra()也沒有工作。
爲什麼我不能得到最後一行? (直到我重新啓動服務器)
謝謝。
編輯: 其他的東西需要不同的「_path *」變量,所以抽象基類對我來說沒有幫助,但這是另一個話題。
至於db_column ='路徑',我這樣說,以便原始查詢更精簡,我試圖刪除它(以便該列是「_path1」,「_path2」等),但問題依然存在。最令人困惑的部分是原始查詢起作用,並且重新啓動服務器修復它(直到插入新行,然後纔看到最後一行)。
EDIT2: 所以我才發現了所發生的事情。我忘記的重要的事情是每張桌子如何結合在一起。
如果我有一個基類: A類
甲亞類: B類(A)
另一亞類中: C類(B)
我有表的鏈接,像這樣:
A - >乙 - 「ç
可以說我有在每個表2點的行(每個O ne代表該類的一個實例):
第1列A:Name =「Gerald」 - > B:Age =「25」 - > C:Gender =「Male」 row 2 A:Name =「Janet」 - > B:Age =「24」 - > C:Gender =「Female」
如果表B中的第二行被刪除,則指向表C的鏈接中斷 所以我基本上切碎了班級的軀幹。 1/3的數據丟失。所以,Django報告它不存在。
因此,請務必在手動刪除條目時小心。你不應該與Django的這個問題,因爲它應該跟蹤你的所有。