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

如何在Django中自动隐藏基于ModelForm的表单中的所有slug字段,django,django-models,django-forms,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_le

我有一个带有
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
如何在不手动指定
ModelForm.exclude
SlugField(可编辑=False)
的情况下,自动防止所有
ModelForms
显示其所有
SlugFields
,您可以通过将字段名指定给
exclude
,在元类中:

class Meta:
    model = SlugModel
    exclude = ('slug',)
通过将字段名指定给
排除
,可以在Meta类中:

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

我认为您还可以扩展Lychas响应,创建基类并从该基类继承:

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

class AnyForm(MyModelForm):
#more here

但这还没有经过测试。

我认为您还可以扩展Lychas响应,创建一个基类并从该基类继承:

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

class AnyForm(MyModelForm):
#more here
这是未经测试的