为什么我的表格中的清洁方法不会清洁?

时间:2016-11-03 10:34:30

标签: django django-forms

我在表单上写了一个干净的方法,但实际上并没有进行验证。

class Property1Form(forms.ModelForm):

    class Meta:
        model = Property1
        fields = ['unit','propertytype','is_true','date','followup_date','quantity','description']

    def __init__(self, *args, **kwargs):
        super(Property1Form, self).__init__(*args, **kwargs)
        instance = getattr(self, 'instance', None)
        if instance:
            self.fields['unit'].required = False
            self.fields['unit'].widget.attrs['disabled'] = 'disabled'

    def clean(self):
        form_data = self.cleaned_data
        if  Property1.objects.filter(unit=form_data['unit'], propertytype=form_data['propertytype'] ).count() > 0:
            self._errors["propertytype"] = ["Propertytype already exists for unit"] # Will raise a error message
            del form_data['propertytype']

相同的验证在模型级别上对我有用,但在模型级别上我得到500错误

  

ValidationError at   /单元/属性/新/ 6 / http://127.0.0.1:8000/unit/property_details/6/   {'所有':[你的财产不能分配更多然后']}

因此,尝试在表单方面进行相同的验证。

更新:

查看方法

def property_new(request,pk,uri):
    unit = get_object_or_404(Unit, pk=pk)
    title = 'property'
    uri = _get_redirect_url(request, uri)
    if request.method == "POST":
        form = Property1Form(request.POST)
        form.fields['unit'] = unit


        if form.is_valid():
            properties = form.save(commit=False)
            properties.unit = unit 

            properties.save()
            messages.add_message(request, messages.SUCCESS, str(properties.unit) + "-SUCCESS Object created sucssefully")

            return redirect(uri)
    else:
        form = Property1Form(initial={'unit': unit})



    return render(request, 'object_edit.html', {'form': form, 'title':title, 'extend': EXTEND})

1 个答案:

答案 0 :(得分:2)

您已设置required=False并已停用unit字段。这意味着浏览器不会为unit字段提交任何值。

因此form.cleaned_data['unit']None,因此if方法中的clean语句始终为False

正如我在other question上建议的那样,我认为设置required=False并禁用unit字段是个不错的主意。如果您不希望用户编辑该字段,请不要将其包含在表单中。