在wagtailadmin中使用limit_choices_to中的或Q()对象

时间:2017-03-03 06:28:18

标签: django django-models wagtail

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中覆盖它

1 个答案:

答案 0 :(得分:0)

一个可能的技巧是编译用户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)