我正在创建用于编辑数据的视图。我正在使用相同的模型形式和html脚本来创建和编辑数据。在创建视图中,我以表单的形式传递实例,但是form.is_valid正在验证新实例的数据。
models.py
class Van(models.Model):
user = models.ForeignKey(User, on_delete=models.CASCADE, related_name='vans')
slug = models.SlugField(max_length=200)
number_plate = models.CharField(max_length=15, unique=True)
commercial_name = models.CharField(max_length=100)
表格
class VanForm(forms.ModelForm):
class Meta:
model = Van
fields = ('commercial_name', 'number_plate', )
def clean_number_plate(self):
number_plate = self.cleaned_data['number_plate']
van = Van.objects.filter(number_plate=number_plate).exists()
if van:
raise forms.ValidationError("A van with this number plate has been registered.")
return number_plate
views.py
def edit_van_detail(request, slug):
van = get_object_or_404(Van, slug=slug)
van_form = VanForm(instance=van)
if request.method == 'POST':
van_form = VanForm(request.POST, request.FILES, instance=van)
if van_form.is_valid():
return HttpResponseRedirect(reverse('edit_van_detail', args=(van.slug,)))
context = {
'van_form': van_form,
}
return render(request, 'van/add_van.html', context)
创建工作正常。但是在“编辑”页面上,当我提交表单时,它会给出我在modelForm中编写的唯一验证错误(“已经注册了带有此车牌的货车。”)。我以前没有任何问题,但是这次我没有错。
您的验证方法错误。您正在检查是否有Van拥有此车牌。您正在编辑的面包车上有...
您应该删除当前正在编辑的模型。
def clean_number_plate(self):
number_plate = self.cleaned_data['number_plate']
van = Van.objects.filter(number_plate=number_plate).exclude(pk=self.instance.pk).exists()
if van:
raise forms.ValidationError("A van with this number plate has been registered.")
即使创建新模型,这也将起作用。未保存模型的主键为“无”。返回号牌
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句