Django:使用泛型关系中的值获取ValueQuerySet

时间:2011-10-14 08:53:05

标签: django django-queryset generic-relations

我有两个通用关系链接的模型:

from django.contrib.contenttypes import generic
from django.db import models

class Bar(models.Model):
    content_type   = models.ForeignKey(ContentType)
    object_id      = models.PositiveIntegerField()
    content_object = generic.GenericForeignKey()

    code  = models.CharField(max_length=10)
    value = models.IntegerField()

class Foo(models.Model):
    ... base fields ...
    bars = generic.GenericRelation(Bar)

现在我希望得到所有'bar.value'的'代码是'xxx',语法如下:

Foo.objects.filter(...foofilters..., bars__code='xxx').values('bars__value')

但这不起作用(Django告诉我'bars__value'不是有效字段。)

任何提示?

编辑: 在SQL中,我会做这样的事情:

SELECT bar.value
FROM   foo 
JOIN   django_content_type AS ct
    ON ct.app_label = 'foo_app'
   AND ct.model = 'foo'
JOIN   bar 
    ON bar.content_type_id = ct.id
   AND bar.object_id = foo.id
WHERE  bar.code = 'xxx'

或将content_type_id与其他查询一起使用

1 个答案:

答案 0 :(得分:0)

你不能这样做......想象sql对于那种情况应该是什么样子

您可能需要的是:

foo_ids = Foo.objects.filter(foo-filters).values_list('id', flat=True) # Getting Foo ids filtered
Bar.objects.filter(
          content_type=ContentType.objects.get_for_model(Foo),
          object_id__in=foo_ids,
          bar-filters
    ).values('value')