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
我得到了一个具有如下 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