如何在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
这是未经测试的