3
我在我的Django應用程序這兩個型號:如何使用Django的GenericRelation在values_list查詢
class ItemOrigin(models.Model):
content_type = models.ForeignKey(ContentType)
object_id = models.PositiveIntegerField()
content_object = generic.GenericForeignKey()
[...]
class Place(models.Model):
name = models.CharField(max_length=256)
origins = generic.GenericRelation(ItemOrigin)
[...]
在Django的1.4,使用下面的查詢工作:
ItemOrigin.objects.values_list('id', 'place')
但由於升級到Django 1.6,該查詢生成以下錯誤信息:
FieldError: Cannot resolve keyword 'place' into field. Choices are: content_type, created, dubitable, evidence, historical_item, id, legacy_id, modified, object_id
我可能錯過了升級筆記,但我看不到有關此類查詢的兼容性中斷的任何提及。
所以我的問題是:爲什麼它不再工作,更重要的是,我該如何修復它,以便相同的查詢將起作用。我更喜歡一個解決方案,查詢代碼沒有被修改(很多),因爲它比我的應用中的模型定義更難更改。這是因爲我的動態查詢系統和values_list中傳遞的字段列表是從配置文件派生的。
感謝:
有關解決方法,你可以做到這一點。我知道我可以這樣查詢它,但希望有一種方法可以避免它,並繼續使用可以輕鬆進行參數化的單個查詢。使事情複雜化的是,我還強制連接在原始查詢(即包含沒有位置或指向其他表的外部項目原始項)上外接左側,因此Django 1.6強制的新版本非常令人失望。 – user3748764
除非他們打算改變1.7版本,否則我認爲你沒有別的選擇。此外,它的意外,所以你可能想要使用雙重查詢。 – Germano
爲了記錄,我決定將GenericForeignKey轉換爲多個ForeignKey字段,因爲它允許我保持我的動態查詢系統完好無損,而不必與單獨的查詢混雜在一起。 – user3748764