django ModelMultipleChoiceField 从实例生成多个选项

django ModelMultipleChoiceField generate multiple option from an instance

我得到了一个具有如下 ModelForm 的项目:

class AddUserToPrivateCourseForm(forms.ModelForm):
    class Meta:
        model = Course
        fields = [
            'users',
        ]

并且 users 是与用户 table 的外键关系。它按预期工作,它生成一个 select 选项 html

<select>
    <option value="pk1">Name</option>
    <option value="pk2">Name</option>
</select>

然后在由 select2 转换为动态搜索字段的模板中,这些选项是用户根据相关课程的名称 selected 现在我必须在字段中添加用户 phone 号码作为搜索 属性。

所以我想到了像小部件这样的东西生成的东西

<select>
    <option value="pk1">Name</option>
    <option value="pk1">Phone Number</option>
    <option value="pk2">Name</option>
    <option value="pk2">Phone Number</option>
</select>

这可能吗,还是我必须想出一些完全不同的方法来解决这个问题?

在搜索并找到这个 answer 之后,我想到了这个:

class AddUserToPrivateCourseForm(forms.ModelForm):

    class Meta:
        model = Course
        fields = [
            'users',
        ]

    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        self.fields['users'].widget.attrs.update({"class": "form-control col-md-7 col-xs-12 select2 selectField"})
        additional_options = self.make_option_list(self.fields['users'].choices)
        self.fields['users'].choices = list(self.fields['users'].choices) + additional_options

    def make_option_list(self, choices):
        choice_list = []
        for item in choices:
            user = User.objects.get(pk=item[0])
            choice_list.append((item[0], user.get_mobile()))
        return choice_list