【问题标题】:Django multiple queryset and concatenationDjango 多个查询集和连接
【发布时间】:2016-08-20 00:34:19
【问题描述】:

我正在 django/angular 中构建一个高级搜索,用户可以在其中从不同的模型

中选择一个或多个字段
#############               #############           #############
Model1                      Model2                  Model2
#############               #############           #############   
Field1                      Field1                  Field1
Field2                      Field2                  Field2
Field3                      Field3                  Field3
......                      Fk(Model1)              Fk(Model1)
                            .......                 ..........

Model2Model3等模型有foreignkeyModel1的引用。

选定的模型字段被发送到 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'))

我有一个请求的字典列表。该列表由 key(型号名称)和 value(字段)组成。

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

我是 django 的新手!

欢迎任何帮助和建议。

【问题讨论】:

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


    【解决方案1】:

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

    这是示例(您应该为 Model2、Model3 ForeignKey 字段使用related_name)

    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

    【讨论】:

    • 我可以Model1.objects.filter()吗?而且我不想将字段与值匹配,而是获取所有结果。我已经编辑了views
    • 如果你想得到所有结果,而不是 filter(),使用 all()。
    • 我不明白你想要这个代码。 result.append(item['key'].objects.filter().values(item['value']).select_related('fk'))'
    • 如果你想通过字符串获取模型类。看到这个link
    猜你喜欢
    • 2023-03-12
    • 1970-01-01
    • 2016-06-12
    • 2013-06-26
    • 2020-07-17
    • 2018-02-08
    • 1970-01-01
    • 2018-03-06
    • 2010-12-11
    相关资源
    最近更新 更多