Django:values_list() 连接多个字段

标签 django concatenation

我有一个 Person模型,我正在使用 django 表单来编辑另一个具有 Person 外键的对象.人物模型有first_namelast_name字段。我想运行一种方法来过滤外部引用下拉框的结果。

我正在尝试使用 values_list()像这样覆盖表单字段选项(选择属性):

data.form.fields['person'].choices = GetPersons().values_list('id', 'first_name')
GetPersons()只过滤 Person 类
return Person.objects.filter(id__gt=1000)`

例如,所以我只让我想出现的人出现。如何使用 values_list()返回 first_name 的串联和 last_name无需返回字典并手动拆分所有内容?

最佳答案

我有两个建议给你:

  • 第一个是将数据库中的字段与 extra 连接起来。 .对我来说是一个肮脏的解决方案,但可以运行。

  • 样本:
    persons =  GetPersons().extra(select={'full_name': "concatenate( first, last) "} )
    choices = persons.values_list('id', 'full_name')
    

    和 ...
  • 第二个使用列表理解:

  • 样本:
    choices = [ ( p.id, '{0} {1}'.format( p.first, p.last ),) for p in GetPersons() ]
    

    2018 年编辑

    Concat现在可用作数据库功能:
    >>> from django.db.models import CharField, Value as V
    >>> from django.db.models.functions import Concat
    >>> persons = GetPersons().annotate(
    ...     full_name=Concat(
    ...         'last', V(', '), 'first', V('.'),
    ...         output_field=CharField()
    ...     )
    ... )
    

    关于Django:values_list() 连接多个字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11417673/

    相关文章:

    django - 使用 django 和 django Rest 框架在 Rest API 中引发自定义 400 错误请求

    Django:在一个页面中创建基于功能的 View 登录和注册表单

    django - 为什么我的数据库不会使用 django_extensions、postgres 和 psycopg2 重置?

    c# - 将安全的 SQL 语句创建为字符串

    php - 是否可以在正则表达式中对两个单独的环视/零宽度断言(即lookbehind/look-behind)进行“与”操作?

    javascript - 如何在查询外部 django View 时刷新部分 DOM HTML

    django - 如何在Django Rest Framework SimpleRouter上使斜杠为可选

    javascript - 为什么 '+' 运算符在 JavaScript 中表现异常?

    matlab - 在Matlab中随机串联WAV文件

    javascript - 动态属性名称连接