【问题标题】:dynamic query getting data post python动态查询获取数据发布python
【发布时间】:2013-10-09 13:43:00
【问题描述】:

当我将数据发布到查询时,我正在执行以下操作:

fields = [
'name',
'surname',
'weight',
'height',
'position',
'agent',
'nationality',
'shirt_name',
'shirt_number',
'preferred_foot',
]

if request.method == 'POST':

    filter_spec = None
    for fld_name in fields:
        value = request.POST.get(fld_name, None)
        if value is not None:
            if fld_name == 'position':
                fld_name = 'position__in'
                value = Position.objects.filter(name=value)
            if fld_name == 'agent':
                fld_name = 'entrepreneur__in'
                value = Entrepreneur.objects.filter(name=value)
            if filter_spec is None:
                filter_spec = Q(**{fld_name: value})
            else:
                filter_spec &= Q(**{fld_name: value})
    players = Player.objects.filter(filter_spec) if filter_spec else Player.objects.none()
    result = [p.get_json() for p in players]
    py_resp = {
        'meta': {
            'total_count': len(result),
        },
        'objects': result,
    }
    json_resp = json.dumps(py_resp)
    return HttpResponse(json_resp, content_type='application/json')

定位查询如下:

Player.objects.filter(position__in=Position.objects.filter(name=positionpost))

所以我按原样做了,我无法在国籍的代码中实现它,因为查询是这样的:

Player.objects.filter(country__in=Country.objects.filter(nationality__in=Nationality.objects.filter(name='Espanhola')))

我不知道如何把它放在上面的代码中 有人可以帮助我吗?

【问题讨论】:

    标签: python django django-queryset


    【解决方案1】:

    您的两个查询都可以大大简化。第一个应该是:

    Player.objects.filter(position__name=positionpost)
    

    第二个:

    Player.objects.filter(country__nationality__name='Espanhola')
    

    这些通常也会更有效,因为它们执行的是 JOIN 而不是子查询。

    【讨论】:

    • 我已经尝试过了,甚至不必像 ... 因为我使用的是 mongobd。但我的疑问是如何按照我用来定位呈现代码的相同逻辑进行国籍查询
    • 我不明白你的评论。为什么这些查询与其他查询不同? fld_name = 'country__nationality__name', value = 'Esnpanhola'.
    • 这些查询只是他们如何做的一个例子......为了更好地理解,如果在我的代码中注意到,我不会直接这样做
    猜你喜欢
    • 1970-01-01
    • 2019-02-06
    • 2015-07-24
    • 1970-01-01
    • 2019-02-17
    • 2012-12-30
    • 2015-06-16
    • 2021-01-15
    • 1970-01-01
    相关资源
    最近更新 更多