我正在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的新手!
欢迎任何帮助和建议。
答案 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