ModelMultipleChoiceField' 对象没有属性 'to_field_name'
ModelMultipleChoiceField' object has no attribute 'to_field_name'
这些是我的文件:
models.py:
class Pierwszy(models.model):
name = models.CharField(max_length=15,blank =True, null= True)
extra = models.CharField(max_length=15,blank =True, null= True)
kids = models.ManyToManyField('Pierwszy', related_name="pierwszy_children", null=True, blank=True)
class Drugi(Pierwszy):
ext_name = models.CharField(max_length=15,blank =True, null= True)
views.py:
class DrugiForm(ModelForm):
def __init__(self, *args, **kwargs):
super(DrugiForm, self).__init__(*args, **kwargs)
instance = getattr(self, 'instance', None)
if instance and instance.pk:
if instance.name is not None:
self.fields['name'].widget.attrs['readonly'] = True
class Meta:
model = Drugi
fields = ('ext_name','name','kids','extra')
widgets = {
'kids' : forms.ModelMultipleChoiceField(queryset=None, widget=forms.CheckboxSelectMultiple()),
}
hidden = {
'extra'
}
模板:
<form method="post">{% csrf_token %}
{{ form.non_field_errors }}
{% for hidden in form.hidden_fields %}
{{ hidden }}
{% endfor %}
{% for field in form.visible_fields %}
<div class="fieldWrapper">
{{ field.errors }}
{{ field.label_tag }}: {{ field }}
</div>
{% endfor %}
<p><input type="submit" value="Send message" /></p>
</form>
在这个阶段我只想查看对象的当前状态。我不想编辑字段。
我将 queryset=None
用于儿童小部件,因为我不想显示所有可能性,只显示连接到实例的名称列表(名称字段)。
我不确定我应该在哪里添加过滤器到查询集(在 widget def 或 init 中),但最大的问题是,无论我做什么,我得到
ModelMultipleChoiceField' object has no attribute 'to_field_name'
我现在已经堆积如山。在 Google 上只有一种情况,但这是关于覆盖 widget/Field - 这不是我的情况。
widgets
字典期望值为 widget
个实例,例如 TextArea()
、TextInput()
等
如果你想使用forms.ModelMultipleChoiceField
,你可以这样做
class DrugiForm(ModelForm):
kids = forms.ModelMultipleChoiceField(queryset=Pierwszy.objects.none(), widget=forms.CheckboxSelectMultiple())
def __init__(self, *args, **kwargs):
super(DrugiForm, self).__init__(*args, **kwargs)
instance = getattr(self, 'instance', None)
if instance and instance.pk:
if instance.name is not None:
self.fields['name'].widget.attrs['readonly'] = True
class Meta:
model = Drugi
fields = ('ext_name','name','kids','extra')
这些是我的文件:
models.py:
class Pierwszy(models.model):
name = models.CharField(max_length=15,blank =True, null= True)
extra = models.CharField(max_length=15,blank =True, null= True)
kids = models.ManyToManyField('Pierwszy', related_name="pierwszy_children", null=True, blank=True)
class Drugi(Pierwszy):
ext_name = models.CharField(max_length=15,blank =True, null= True)
views.py:
class DrugiForm(ModelForm):
def __init__(self, *args, **kwargs):
super(DrugiForm, self).__init__(*args, **kwargs)
instance = getattr(self, 'instance', None)
if instance and instance.pk:
if instance.name is not None:
self.fields['name'].widget.attrs['readonly'] = True
class Meta:
model = Drugi
fields = ('ext_name','name','kids','extra')
widgets = {
'kids' : forms.ModelMultipleChoiceField(queryset=None, widget=forms.CheckboxSelectMultiple()),
}
hidden = {
'extra'
}
模板:
<form method="post">{% csrf_token %}
{{ form.non_field_errors }}
{% for hidden in form.hidden_fields %}
{{ hidden }}
{% endfor %}
{% for field in form.visible_fields %}
<div class="fieldWrapper">
{{ field.errors }}
{{ field.label_tag }}: {{ field }}
</div>
{% endfor %}
<p><input type="submit" value="Send message" /></p>
</form>
在这个阶段我只想查看对象的当前状态。我不想编辑字段。
我将 queryset=None
用于儿童小部件,因为我不想显示所有可能性,只显示连接到实例的名称列表(名称字段)。
我不确定我应该在哪里添加过滤器到查询集(在 widget def 或 init 中),但最大的问题是,无论我做什么,我得到
ModelMultipleChoiceField' object has no attribute 'to_field_name'
我现在已经堆积如山。在 Google 上只有一种情况,但这是关于覆盖 widget/Field - 这不是我的情况。
widgets
字典期望值为 widget
个实例,例如 TextArea()
、TextInput()
等
如果你想使用forms.ModelMultipleChoiceField
,你可以这样做
class DrugiForm(ModelForm):
kids = forms.ModelMultipleChoiceField(queryset=Pierwszy.objects.none(), widget=forms.CheckboxSelectMultiple())
def __init__(self, *args, **kwargs):
super(DrugiForm, self).__init__(*args, **kwargs)
instance = getattr(self, 'instance', None)
if instance and instance.pk:
if instance.name is not None:
self.fields['name'].widget.attrs['readonly'] = True
class Meta:
model = Drugi
fields = ('ext_name','name','kids','extra')