Django多个查询集和连接

时间:2016-04-26 09:18:58

标签: angularjs django django-models concatenation django-queryset

我正在django / angular中构建高级搜索,用户可以从不同的模型中选择一个或多个字段

#############               #############           #############
Model1                      Model2                  Model2
#############               #############           #############   
Field1                      Field1                  Field1
Field2                      Field2                  Field2
Field3                      Field3                  Field3
......                      Fk(Model1)              Fk(Model1)
                            .......                 ..........

Model2 Model3 和其他型号的外键引用 Model1

将选定的模型字段发送到django视图以进一步查询和结果连接。

views.py

def customsearch(request):
    queryrequest = json.loads(request.body)

    result = []
    print queryrequest
    """ [{u'value': u'Field1', u'key': u'Model1'}, {u'value': u'Field2', u'key': u'Model2'}, {u'value': u'Field3', u'key': u'Model2'}, {u'value': u'Field2', u'key': u'Field2'}]"""

    for item in queryrequest:
        if(item['key'] == 'Model1'):
            result.append(Model1.objects.filter().values(item['value']))
        else:
            result.append(item['key'].objects.filter().values(item['value']).select_related('fk'))

我有一个请求的词典列表。该列表包含(型号名称)和(字段)。

如何根据上述示例进行查询和结果?

我是django的新手!

欢迎任何帮助和建议。

1 个答案:

答案 0 :(得分:2)

如果你的model2,model3有fk到model1,

这是示例(您应该使用Related_name for Model2,Model3 ForeignKey Field)

from django.db.models import Q
Model1.objects.filter(
    Q(Field1=value1) & 
    Q(model2_related_name__Field2=value2) &
    Q(model3_related_name__Field3=value3)
)

,关于related_name this