我的Django应用程序中有这两个模型:
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中传递的字段列表是从配置文件派生的。
答案 0 :(得分:2)
在Django< 1.6但未经测试且无证。有open ticket here。
要获得解决方法,您可以执行以下操作:
ctype = ContentType.objects.get_for_model(Place)
pk_list = ItemOrigin.objects.filter(
content_type=ctype
).values_list('object_id', flat=True)
places = Place.objects.filter(pk__in=pk_list)