我的问题是,我们能否根据不同的操作对同一个表单执行不同的表单验证,例如添加或更改。
假设我有一个模型,它有一个名为“type”的字段。'type' 是一个枚举字段,它的选择是 'Manual' 和 'Auto'。添加新实例时,我不希望用户能够将“类型”设置为“自动”。但是,用户将查看和修改“类型”为“自动”的实例。
也许我不需要验证来做到这一点。所以如果有任何其他选择,我想听听。
提前致谢。
我的问题是,我们能否根据不同的操作对同一个表单执行不同的表单验证,例如添加或更改。
假设我有一个模型,它有一个名为“type”的字段。'type' 是一个枚举字段,它的选择是 'Manual' 和 'Auto'。添加新实例时,我不希望用户能够将“类型”设置为“自动”。但是,用户将查看和修改“类型”为“自动”的实例。
也许我不需要验证来做到这一点。所以如果有任何其他选择,我想听听。
提前致谢。
给定模型:
class Spam(models.Model):
foo_type = models.WhateverFieldType(editable=False, choices=FOO_TYPE_CHOICES)
# ... other fields
使用此表单(不包括该foo_type
字段(不允许使用该表单编辑该字段并且还禁用该字段的验证 - 它基本上是,“在这里,编辑Spam
除此实例之外的任何内容foo_type
”):
class SpamForm(forms.ModelForm):
class Meta:
exclude = ('foo_type',)
然后,创建 和 的一个子类,UpdateView
并ListView
更新查询集以仅包含tye_type
设置为的用户Auto
。
class SpamUpdateView(UpdateView):
def get_queryset(self):
return super(SpamUpdateView, self).get_queryset().filter(foo_type=FOO_TYPE_AUTO)
class SpamListView(ListView):
def get_queryset(self):
return super(SpamListView, self).get_queryset().filter(foo_type=FOO_TYPE_AUTO)