Django抽象模型字段名称选择

时间:2014-12-18 03:32:49

标签: django django-models

我正在尝试创建一个抽象模型来实现可继承的功能,以保存到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

除了我想以某种方式在子模型中指定是否包含“名称”字段或“标题”字段之外,一切正常。有什么建议?感谢。

1 个答案:

答案 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)
相关问题