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