django_filter ModelChoiceFilter auth.models.User ForeignKey to_field_name

时间:2018-03-05 05:01:25

标签: django django-users django-filter

我正在使用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

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

1 个答案:

答案 0 :(得分: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

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