django_filter ModelChoiceFilter auth.models.User ForeignKey to_field_name

问题描述 投票:0回答:1

我正在使用django_filter对我的模板(Django 1.11)中呈现的django_tables2进行过滤。我想要过滤的一个字段是来自内置用户模型的ForeignKey:

class User(auth.models.User,auth.models.PermissionsMixin):

class Task(models.Model):
    assigned = models.ForeignKey(User,on_delete=models.DO_NOTHING)

我的过滤器设置如下:

class TaskFilter(django_filters.FilterSet):
    assigned = django_filters.ModelChoiceFilter(queryset=User.objects.filter(is_staff=False),label=('Assigned'))

过滤工作正常但不是在过滤器下拉列表中显示的默认“用户名”我想使用用户的全名:get_full_name

有没有人有关于如何实现这一目标的建议?任何指导将不胜感激!

django django-users django-filter
1个回答
0
投票

好的,我找到了解决方案。不确定这是正确的方法还是只是一个解决方法,但无论如何它对我来说都很好。

将过滤器类型更改为ChoiceField:

assigned = django_filters.ChoiceFilter(choices=get_full_names,label=('Assigned'))

并使用以下内容填充选项:

def get_full_names():
    full_names = ()
    users = User.objects.filter(is_staff=False)
    for user in users:
        full_names += (user.id, user.get_full_name),
    return full_names

希望这有助于其他有同样问题的人。

© www.soinside.com 2019 - 2024. All rights reserved.