1

我有一个带有 follow_by 字段的订单模型:

class order(models.Model):
   followed_by = models.ForeignKey(User, limit_choices_to={'groups__name': "Managers"})

我有几个这样的模型和这些模型的表格。默认情况下,表单显示一个 modelchoicefield 列出作为经理的用户。这可以。但是显示效果不好:它给出了用户名,我想要名字+姓氏。这会很好地工作:更改 Django ModelChoiceField 以显示用户的全名而不是用户名

除了现在我必须声明查询集以将用户限制为经理。我可以使用上述方法,以便自定义模型选择字段默认为我过滤的查询集。所以从一个表格中我可以说:

followed_by = ManagerUserModelChoiceField()
4

3 回答 3

0

Can you define the queryset on your ModelChoiceField child class?

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()
于 2012-12-08T17:45:48.440 回答
0

尝试将查询集作为参数传递给ManagerUserModelChoiceField类。

followed_by = ModelChoiceField(queryset = User.objects.filter(groups__name="Managers")
于 2012-12-08T17:48:20.483 回答
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 新手,所以我不确定这是否是一件坏事,或者我是否应该以某种方式让它变得更好?我会很感激一些反馈。话虽如此,它似乎工作正常。

于 2012-12-09T21:15:24.907 回答