我有一个带有follow_by字段的订单模型:
class order(models.Model):
followed_by = models.ForeignKey(User, limit_choices_to={'groups__name': "Managers"})
我为这些模型提供了几个这样的模型和表格。默认情况下,表单会显示一个modelchoicefield,其中列出了作为管理员的用户。这可以。但显示效果并不好:它提供了用户名,我想要第一个+姓氏。这很好用:Change Django ModelChoiceField to show users' full names rather than usernames
除了现在在everyform中我必须声明查询集以限制用户到管理员。我可以使用上面的方法,以便自定义modelchoicefield默认为我的筛选查询集。所以我可以从一个表格中说出:
followed_by = ManagerUserModelChoiceField()
答案 0 :(得分:0)
您可以在ModelChoiceField
子类上定义查询集吗?
class UserModelChoiceField(ModelChoiceField):
# Query that returns set of valid choices
queryset = User.objects.filter(group__name='Managers')
def label_from_instance(self, obj):
return obj.get_full_name()
答案 1 :(得分:0)
尝试将查询集作为参数传递给ManagerUserModelChoiceField
类。
followed_by = ModelChoiceField(queryset = User.objects.filter(groups__name="Managers")
答案 2 :(得分:0)
在我对@Enrico的评论之后,我想到了这个想法:我覆盖了" init"我的自定义字段上的类如下:
class UserModelChoiceField(forms.ModelChoiceField):
def __init__(self, *args, **kwargs):
super(UserModelChoiceField, self).__init__(queryset=User.objects.filter(groups__name="Managers"), *args, **kwargs)
我以前在python中看过这样的事情,但我是python的新手,所以我不确定这是不是坏事,或者我是否应该以某种方式改善它?我很感激一些反馈。话虽如此,它似乎工作正常。