3

出现错误Argument of type 'NoneType' is not iterable,无法弄清楚原因。

它发生在生产线上 if model_form.is_valid():

视图.py

def update_model(request, pricemodel_id):
    """ Update a part given its id. """
    pricemod = Part.objects.get(id=pricemodel_id)
    if request.method == "POST":
        print "post request"
        model_form = priceform(request.POST, request.FILES, instance=pricemod)
        model_form.is_update = True
        if request.user == pricemod.adder:
            #from ipdb import set_trace; set_trace()
            if model_form.is_valid():

表格.py

class priceform(ModelForm):
# price Form: form associated to the Part model
    def __init__(self, *args, **kwargs):
        super(priceform, self).__init__(*args,**kwargs)
        self.is_update=False
        choices = UniPart.objects.all().values('manufacturer').distinct()
    def clean(self):
        if self.cleaned_data and 'modelname' not in self.cleaned_data:
            raise forms.ValidationError("Some error message")
            if not self.is_update:
                return self.cleaned_data
            return self.cleaned_data
    class Meta:
        model = Part
4

1 回答 1

3

看起来这是因为您的清洁方法中的缩进错误。当前它不返回任何东西,即它返回None,但必须返回self.cleaned_data. 您的所有clean方法代码都在 下if,这将引发异常。如果if不匹配,则返回 None。

尝试这个:

class priceform(ModelForm):
    # ...
    def clean(self):
        if self.cleaned_data and 'modelname' not in self.cleaned_data:
            raise forms.ValidationError("Some error message")
        if not self.is_update:
            return self.cleaned_data
        return self.cleaned_data

    # ...
于 2013-05-14T16:47:34.107 回答