【问题标题】:Model query, filtering with choices [closed]模型查询,选择过滤[关闭]
【发布时间】:2016-03-30 19:04:21
【问题描述】:

我有一个模型字段如下。

GENDER_IN_CHOISES = (
        (MALE, _('Male')),
        (FEMALE, _('Female')),
        (UNDEFINED, _('Undefined')),
    )
    gender = models.CharField(max_length=2, choices=GENDER_IN_CHOISES, default=UNDEFINED)

我正在使用对象过滤进行查询,但以下内容不能满足我的需求。

Users.objects.filter(gender__contains='male')

您知道查询选择字段的方法吗?

【问题讨论】:

  • “不工作”是什么意思?错误?结果无效?你预计会发生什么目前没有发生的事情?
  • 我的意思是它不适合我。
  • “不工作”是一个非常模糊和广泛的陈述。

标签: python django django-models django-rest-framework


【解决方案1】:

如果MALEFEMALE 被定义为'ML''FL',那么contains='male' 或不区分大小写的版本icontains='male' 查询将无用,因为数据库字段包含'ML' 和' FL'

您的查询将更符合以下方面:

Users.objects.filter(gender__in=('ML', 'FL'))

但是你应该重用你的常量来保持代码干燥(不要重复你自己)

Users.objects.filter(gender__in=(MALE, FEMALE))

或者,排除未定义的性别

Users.objects.exclude(gender=UNDEFINED)

【讨论】:

  • 它的工作原理是这样的Users.objects.filter(gender__in=('ML', 'FL'))。但这并不能满足我……
  • 我有一个如上所述的字符字段并尝试制作一个过滤器(即名字包含'umut'...)我通过rest API将文本从前端发布到后端。 [{"field":"first_name","condition":"icontains","text":"umut"}] 变为 exec 'users = users.objects.filter('+field+'__'+condition_+'="'+text+'")' 。这个过滤的结果我得到了最终用户。我不知道如何在有选择的字段上执行此方法。例如,[{"field":"gender","condition":"icontains","text":"ale"}]
  • 将字符串从客户端传送到服务器以进行连接和exec 不仅缺乏优雅和秩序,而且对于安全性来说是一种非常糟糕的做法。 REST API 具有过滤器支持,example。如果您告诉我您正在使用哪个 REST 框架并提出一个单独的问题,我可能会提供帮助,或者至少可以帮助编写一个进行过滤的 REST 视图。关于这个问题,我们已经回答过了,因为查询有效。
  • 我正在使用 django-rest-framework。我知道这并不优雅,但我正在考虑为我的 API 采取安全措施。
猜你喜欢
  • 2018-09-01
  • 2015-04-01
  • 2022-01-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-11-14
  • 2018-08-14
相关资源
最近更新 更多