django_filter 模型选择过滤器 auth.models.User 外键 to_field_name

django_filter ModelChoiceFilter auth.models.User ForeignKey to_field_name

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

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

有人对如何实现这一点有什么建议吗?任何指导将不胜感激!

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

将过滤器类型更改为 ChoiceField:

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

并使用以下内容填充 CHOICES:

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

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