我对 ModelChoiceField 有一个简单的问题,我有一个包含四个字段(名称、价格 1、价格 2、价格 3)的分类类,我添加了一个编辑按钮并且它工作正常,我在编辑页面上添加了名称作为 ModelChoiceField,我的问题是我试图在编辑时强制选择名称值,因此用户只能更改价格值。
我阅读了有关 ModelForm 的文档,这使我看到了这个 https://docs.djangoproject.com/en/2.2/ref/forms/api/#django.forms.Form.initial
我尝试了 initial= 但它并没有像我一样工作。任何动态选择值或只打印名称而不允许用户更改它的想法都会很棒。
这是我的代码,views.py
def edit_class(request, name):
classifications = Classification.objects.all()
devices = Devices.objects.all()
inst = Classification.objects.get(name=name)
if request.method == 'POST':
classification = EditClassForm(request.POST, instance=inst)
if classification.is_valid():
classification.save()
return redirect("/classifications.html")
else:
classification = EditClassForm()
return render(request, 'classifications.html',
{"form": classification, "classifications": classifications, "devices": devices})
表格.py
class EditClassForm(forms.ModelForm):
class Meta(object):
model = Classification
fields = ("name", "price1", "price2", "price3")
def __init__(self, *args, **kwargs):
super(EditClassForm, self).__init__(*args, **kwargs)
self.fields['name'] = forms.ModelChoiceField(queryset=Classification.objects.all(), initial=0)
self.fields['name'].widget.attrs.update({'class': "form-control"})
self.fields['price1'].widget.attrs.update({'class': "form-control", 'value': 0})
self.fields['price2'].widget.attrs.update({'class': "form-control", 'value': 0})
self.fields['price3'].widget.attrs.update({'class': "form-control", 'value': 0})
网址.py
urlpatterns = [url(r'^editclass/(?P<name>\d*\S*)/$', views.edit_class, name='edit_class'),]
在模板中我只使用 {{form.name}} 。