我正在使用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
有没有人有关于如何实现这一目标的建议?任何指导将不胜感激!
答案 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
希望这有助于遇到同样问题的其他人。