django - django 将 ModelChoiceField 的“to_field_name”设置为多列
问题描述
我想在 Django 的 modelChoiceField 中提供多个字段名称to_field_name
就像是
field1 = forms.ModelChoiceField(queryset=myModel.objects.all(), required=False,
empty_label="--------",
to_field_name=["col1, col2"],
widget=forms.Select(attrs={'class':'form-control'}),
)
我有一个像
class Codes(models.Model):
item_code = models.CharField(max_length=50)
item_name = models.CharField(max_length=50)
def __str__(self):
return self.item_code + self.item_name
现在我可以设置queryset
为
field1 = forms.ModelChoiceField(queryset=Codes.objects.all(), required=False,
empty_label="--------",
widget=forms.Select(attrs={'class':'form-control'}),
)
我将在我的select
标签选项中获得两个字段的组合
一切正常,但是当我打开编辑页面时,选择框不显示默认选择值
另外,我想要一个字段组合,因为item_code
在数据库中重复时to_field_name
会出错。
解决方案
我相信你解释to_field_name
错了:
根据 Django 网站(Django to_field_name解释):
此可选参数用于指定要用作字段小部件中选项值的字段。确保它是模型的唯一字段,否则所选值可能匹配多个对象。默认情况下它设置为无,在这种情况下,将使用每个对象的主键...
这意味着您可以使用to_field_name
来处理 HTML 中的表单对象。但它并没有说明多重to_field_name
价值。通常主键用于寻址对象。如果您设置,to_field_name
则将使用该字段。
要将数据实际添加到modelChoiceField
对象中,您需要执行类似的操作。
class CustomForm(ModelForm):
muscles = forms.ModelMultipleChoiceField(
queryset=None,
to_field_name='name',
required=False,)
def __init__(self, *args, **kwargs):
super(CustomForm, self).__init__(*args, **kwargs)
self.fields['name'].queryset = Users.objects.all()
推荐阅读
- python - 使用 BeautifulSoup 为抓取的网页的 Script 标签提取所需信息
- java-native-interface - 使用 protobuf-cpp 作为 JNI 的依赖项时出错
- javascript - 如何在 node js 中为 route.get 设置标头和参数?
- sql - 需要提取在 2 个表之间具有相同列名的行,并且只显示第 2 个表的公共行
- html - 文本和按钮并排
- google-apps-script - appendRow() 不可靠(覆盖“重”电子表格中的现有值/行)
- android - Android工作室'必须导出活动或包含意图过滤器'
- python - 将数百个 xml 文件转换为单个 csv 文件
- php - 如果商品已在购物车中,Woocommerce 和 Gravity 在添加到购物车时会收到默认确认消息
- javascript - 你可以为html onkeyup添加多个javascript函数吗