0

我的问题是,我们能否根据不同的操作对同一个表单执行不同的表单验证,例如添加或更改。

假设我有一个模型,它有一个名为“type”的字段。'type' 是一个枚举字段,它的选择是 'Manual' 和 'Auto'。添加新实例时,我不希望用户能够将“类型”设置为“自动”。但是,用户将查看和修改“类型”为“自动”的实例。

也许我不需要验证来做到这一点。所以如果有任何其他选择,我想听听。

提前致谢。

4

1 回答 1

0

给定模型:

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',)

然后,创建 和 的一个子类,UpdateViewListView更新查询集以仅包含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)
于 2013-05-06T16:06:34.957 回答