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
希望这对遇到同样问题的其他人有所帮助。
我正在使用 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
希望这对遇到同样问题的其他人有所帮助。