如何在Django中自动隐藏基于ModelForm的表单中的所有段塞字段

时间:2012-02-28 21:54:09

标签: django django-models django-forms

我有一个SlugField的模型。第一次保存模型实例时,将创建该字段的值:

from django.db import models
from django.template.defaultfilters import slugify as default_slugify

class SlugModel(models.Model):
    name = models.CharField(max_length=100)
    slug = models.SlugField(max_length=100)

    def save(self, *args, **kwargs):
        if not self.pk:
            self.slug = self.slugify(self.name)
        return super(SlugModel, self).save(*args, **kwargs)

    def slugify(self, tag):
        slug = default_slugify(tag)
        return slug

如果我在ModelForm中使用该模型,则默认显示slug字段。

from django.forms import ModelForm

class SlugModelForm(ModelForm):
    class Meta:
        model = SlugModel

如果不在每个表单/字段上手动指定ModelFormsSlugFields,如何自动阻止所有ModelForm.exclude显示所有SlugField(editable=False)

2 个答案:

答案 0 :(得分:2)

您可以通过为exclude分配字段名称来在Meta类中exclude fields

class Meta:
    model = SlugModel
    exclude = ('slug',)

答案 1 :(得分:2)

我认为你也可以扩展Lychas响应,创建一个基类并从那个继承:

class MyModelForm(ModelForm):
    class Meta:
    exclude = ('slug',)
    abstract = True

class AnyForm(MyModelForm):
#more here

虽然这是未经测试的。