【问题标题】:Using or Q() objects in limit_choices_to in wagtailadmin在 wagtailadmin 的 limit_choices_to 中使用或 Q() 对象
【发布时间】:2017-03-03 06:28:17
【问题描述】:

Django 1.10.5

def limit_contributor_choices():
    limit = Q(group__name="contributor") | Q(group__name="Group")
    return limit


author = models.ForeignKey(
    settings.AUTH_USER_MODEL,
    blank=True, null=True,
    limit_choices_to=limit_contributor_choices,
    verbose_name=_('Author'),
    on_delete=models.SET_NULL,
    related_name='author_pages',
)

使用以下代码,如果用户在多个组中,则查询会多次返回该用户。如何获得不同的值?

我在自动生成下拉列表的 wagtail 管理员中使用它。

也许另一种看待它的方式是覆盖查询集并添加 distinct()?如果是这样,我不确定如何在 wagtailadmin 中覆盖它

【问题讨论】:

  • 你在使用表单吗?
  • 不,现在不行。这些是在 wagtail 管理员中自动生成的

标签: django django-models wagtail


【解决方案1】:

一个可能的技巧是编译一个用户 ID 列表,然后将其作为过滤条件返回:

def limit_contributor_choices():
    allowed_user_ids = User.objects.filter(Q(group__name="contributor") | Q(group__name="Group")).values_list('id', flat=True)
    return Q(id__in=allowed_user_ids)

【讨论】:

    猜你喜欢
    • 2013-05-30
    • 1970-01-01
    • 2017-09-16
    • 2012-03-24
    • 2015-05-13
    • 2015-06-05
    • 2022-12-29
    • 2015-04-13
    • 2014-07-30
    相关资源
    最近更新 更多