我有一个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
如果不在每个表单/字段上手动指定ModelForms
或SlugFields
,如何自动阻止所有ModelForm.exclude
显示所有SlugField(editable=False)
。
答案 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
虽然这是未经测试的。