查询GenericRelation字段DJango

时间:2018-03-19 12:43:10

标签: sql django postgresql

models.py

class Contact(models.Model):
         attributes = GenericRelation(
 AttributeValue,related_query_name='contact',content_type_field='target_content_type',object_id_field='target_object_id')

class AttributeValue(models.Model):
    attribute = models.ForeignKey(Attribute, related_name="attribute")

    # the object instance we are associating this attribute to
    target_content_type = models.ForeignKey(ContentType, related_name="attribute_value_target_content_type",
                                            on_delete=models.CASCADE, blank=True, null=True)
    target_object_id = models.PositiveIntegerField(blank=True, null=True, db_index=True)
    target = GenericForeignKey('target_content_type', 'target_object_id')

class Attribute(models.Model):
    name = CHarFIeld()

我希望获得符合以下条件的所有联系人

  1. 属性字段中包含AttributeValue模型对象 attributes__attribute__name =' crop_name'和 attributes__value ='花生'
  2. 属性字段中有一个AttributeValue模型对象,其中包含attributes__attribute__name =' crop_season'和attributes__value ='冬天'
  3. 实现这一目标的一种方法如下:

    Contact.objects.all().filter(Q(attributes__attribute__name='crop_name') & Q(attributes__value='groundnut')).filter(Q(attributes__attribute__name='crop_season') & Q(attributes__value='winter'))
    

    上面提到的查询工作正常。但是我想构建一个这样的查询,可以将其提供给 .filter()

    即。

    之类的东西
    Contact.objects.filter(query)
    

    我尝试过像

    这样的事情
    Contact.objects.filter(Q(Q(attributes__attribute__name='crop_name') & Q(attributes__value='groundnut'))& Q(Q(attributes__attribute__name='crop_season') & Q(attributes__value='winter')))
    

    期待查询会尊重大括号,但它不是我想的那样

    P.S。我正在使用django(1.11.4)+ postgres(9.5.7)组合

0 个答案:

没有答案