【问题标题】:How to write a QuerySet using F expressions on a related model's FK field in Django如何在 Django 中相关模型的 FK 字段上使用 F 表达式编写 QuerySet
【发布时间】:2020-01-14 03:21:08
【问题描述】:

在我的 autocomplete 函数中,我使用以下查询表达式来获取模型字段值:

def CitySearch(request):
    if request.is_ajax():
        q = request.GET.get('term','')
        names = City.objects.filter(name__icontains=q).annotate(value=F('name'), label=F('name')).values('id', 'value', 'label')

    ...
    ...
    return HttpResponse.....

如何将(模型)City字段“name”过滤到相关模型“Country”的FK字段?

【问题讨论】:

  • 你的意思是内部连接吗?您能详细说明您的要求吗?
  • 没错。我正在使用 jQuery 自动完成功能,并尝试通过外键将两个城市(我尝试为其构建 QuerySet 的模型)中的国家字段值过滤到相关模型“国家”。

标签: django django-queryset jquery-ui-autocomplete django-filters


【解决方案1】:

下面猜猜国家有没有名字字段。

 names = City.objects.filter(name__icontains=q).annotate(value=F('name'), label=F('name')).values('id', 'value', 'label', 'country__name')

或者你可以这样做,

 names = City.objects.filter(name__icontains=q).annotate(value=F('name'), country_name=F('country__name'), label=F('name')).values('id', 'value', 'label', 'country_name')

【讨论】:

  • 型号“Country”的 FK 字段定义为 name。但是,对于这两种选择,我都会收到错误ValueError: The annotation 'country' conflicts with a field on the model
  • 我更新了答案。希望它会有所帮助。您只需要命名国家以外的字段。
  • 它能解决问题吗?
  • 对不起,没有。虽然这次没有错误,但过滤器不起作用。
  • 你是这样提取价值的吗? .values('id', 'value', 'label', 'country_name')
猜你喜欢
  • 2019-01-15
  • 1970-01-01
  • 2014-02-17
  • 2010-11-12
  • 2014-02-21
  • 2022-06-17
  • 1970-01-01
  • 1970-01-01
  • 2013-06-12
相关资源
最近更新 更多