1

我对 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}} 。

4

0 回答 0