我正在尝试创建一个抽象模型来实现可继承的功能,以保存到save方法的slug字段。
我有一些非常接近的东西,但唯一的问题是某些模型需要一个名为“name”的字段,而某些模型需要一个名为“title”的字段。
以下是代理模型的样子:
class SaveSlug(models.Model)
'''
Save an identifying slug based on the title/name field on save
'''
name = models.CharField(max_length=30)
title = models.CharField(max_length=30)
slug = slug = models.SlugField(db_index=True, unique=True)
def save(self, *args, **kwargs):
self.slug = slugify(self.name)
super(SaveSlug, self).save(*args, **kwargs)
class Meta:
abstract = True
除了我想以某种方式在子模型中指定是否包含“名称”字段或“标题”字段之外,一切正常。有什么建议?感谢。
答案 0 :(得分:1)
一种好的方法是使用公共字段的超类,以及名称和标题的子类。
class Slug(models.Model)
slug = models.SlugField(db_index=True, unique=True)
class Meta:
abstract = True
class NamedSlug(Slug)
name = models.CharField(max_length=30)
def save(self, *args, **kwargs):
self.slug = slugify(self.name)
super(NamedSlug, self).save(*args, **kwargs)
class TitledSlug(Slug)
title = models.CharField(max_length=30)
def save(self, *args, **kwargs):
self.slug = slugify(self.title)
super(TitledSlug, self).save(*args, **kwargs)