仅当输入的文本与

时间:2018-06-17 10:58:08

标签: python django django-models

models.py

class test1(models.Model):
    write = models.CharField(max_length=20)
    def __str__(self):
        return self.write

forms.py

class NameForm(forms.ModelForm):
    class Meta():
        model = test1
        fields = '__all__'

views.py

def get_name(request):
    if request.method == 'POST':
        form = NameForm(request.POST)
        if form.is_valid():
            if form.objects.write == 'banana':
                form.save(commit=True)
            else:
                return "Wrong name"
            return render(request,'app_one/index.html')
    else:
        form = NameForm()
    return render(request, 'name.html', {'form': form})

我想仅在用户在NameForm的write字段中输入banana时才保存表单。 如果form.objects.write =='banana',我可以使用:                         form.save(提交= TRUE)

1 个答案:

答案 0 :(得分:2)

除了您之前提出的问题之外,这似乎也显示出对于哪些表单以及它们如何工作存在一些困惑。但是,如果要根据字段的值来阻止保存,则根据定义进行验证,并且属于表单本身。所以:

class NameForm(forms.ModelForm):

    def clean_write(self):
        value = self.cleaned_data['write']
        if value != 'banana': 
            raise forms.ValidationError('wrong value')
        return value

    class Meta():
        model = test1
        fields = '__all__'