即使在表单中传递实例后,ModelForm也会为新实例验证数据

Sandeep

我正在创建用于编辑数据的视图。我正在使用相同的模型形式和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中编写的唯一验证错误(“已经注册了带有此车牌的货车。”)。我以前没有任何问题,但是这次我没有错。

尼古拉斯·阿普里乌(Nicolas Appriou)

您的验证方法错误。您正在检查是否有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] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

当新的模型实例传递到局部视图时,字段仍包含表单数据

来自分类Dev

在haskell中定义新的monad不会为Applicative带来任何实例

来自分类Dev

创建表单新实例的方法

来自分类Dev

Django Formset:在每个表单实例中传递参数

来自分类Dev

指定Django ModelForm实例的数据库

来自分类Dev

使用表单中的按钮启动项目的新实例

来自分类Dev

创建新实例后,Openstack trove数据库实例status = error

来自分类Dev

如何在 Django ModelForm 中获取实例

来自分类Dev

UpdateView 问题:在 url 中传递的清理数据不在实例中

来自分类Dev

如何控制ModelForm中POST数据中的哪些字段覆盖传入实例的字段?

来自分类Dev

如何修复将数据从表单的新实例发送到主表单上的datagrid的问题

来自分类Dev

Vue 中如何将数据从组件传递到实例

来自分类Dev

错误:升级后状态中的资源实例数据无效

来自分类Dev

modelForm实例未通过

来自分类Dev

实例=会话ID的ModelForm

来自分类Dev

Grails-从数据库中检索新实例

来自分类Dev

Django使用表中的'__init__'函数创建模型的新实例,实例数据是错误的?

来自分类Dev

在流中存储新实例

来自分类Dev

在两个表单之间传输数据,而无需再次创建新实例

来自分类Dev

使用表单的多个实例发送不同的数据

来自分类Dev

Django:在表单实例中传递作者帖子以创建聊天记录

来自分类Dev

将实例变量从另一个模型传递到表单中

来自分类Dev

Android将数据从活动传递到片段,而无需创建新实例

来自分类Dev

如何访问类的目的实例并传递数据?

来自分类Dev

在不同的PHP实例之间传递数据

来自分类Dev

即使更新后,Python类仍使用实例化值

来自分类Dev

即使在更改入站规则后,连接也被 AWS 实例拒绝

来自分类Dev

在Django的ModelForm中更新/更改当前用户实例的信息

来自分类Dev

使用CBV中的初始值实例化ModelForm

Related 相关文章

  1. 1

    当新的模型实例传递到局部视图时,字段仍包含表单数据

  2. 2

    在haskell中定义新的monad不会为Applicative带来任何实例

  3. 3

    创建表单新实例的方法

  4. 4

    Django Formset:在每个表单实例中传递参数

  5. 5

    指定Django ModelForm实例的数据库

  6. 6

    使用表单中的按钮启动项目的新实例

  7. 7

    创建新实例后,Openstack trove数据库实例status = error

  8. 8

    如何在 Django ModelForm 中获取实例

  9. 9

    UpdateView 问题:在 url 中传递的清理数据不在实例中

  10. 10

    如何控制ModelForm中POST数据中的哪些字段覆盖传入实例的字段?

  11. 11

    如何修复将数据从表单的新实例发送到主表单上的datagrid的问题

  12. 12

    Vue 中如何将数据从组件传递到实例

  13. 13

    错误:升级后状态中的资源实例数据无效

  14. 14

    modelForm实例未通过

  15. 15

    实例=会话ID的ModelForm

  16. 16

    Grails-从数据库中检索新实例

  17. 17

    Django使用表中的'__init__'函数创建模型的新实例,实例数据是错误的?

  18. 18

    在流中存储新实例

  19. 19

    在两个表单之间传输数据,而无需再次创建新实例

  20. 20

    使用表单的多个实例发送不同的数据

  21. 21

    Django:在表单实例中传递作者帖子以创建聊天记录

  22. 22

    将实例变量从另一个模型传递到表单中

  23. 23

    Android将数据从活动传递到片段,而无需创建新实例

  24. 24

    如何访问类的目的实例并传递数据?

  25. 25

    在不同的PHP实例之间传递数据

  26. 26

    即使更新后,Python类仍使用实例化值

  27. 27

    即使在更改入站规则后,连接也被 AWS 实例拒绝

  28. 28

    在Django的ModelForm中更新/更改当前用户实例的信息

  29. 29

    使用CBV中的初始值实例化ModelForm

热门标签

归档