Django ModelChoiceField自动选择视图传递值

2024-10-03 21:26:12 发布

您现在位置:Python中文网/ 问答频道 /正文

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

forms.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})

url.py

urlpatterns = [url(r'^editclass/(?P<name>\d*\S*)/$', views.edit_class, name='edit_class'),]

在模板中,我只使用{form.name}


Tags: nameselfform名称fieldsobjectsrequest价格