【问题标题】:Mixin inhheritance for models in djangoMixin inhheritance for models in django
【发布时间】:2013-07-06 22:36:51
【问题描述】:

有没有办法像这样构建 django 模型层次结构?

class LikableObjectMixin(models.Model):
    # mixin for all likable objects: posts, photos, etc
    likers = models.ManyToManyField(Account)

    class Meta:
        abstract = True

    def save():
        super(LikableObjectMixin, self).save()


class Post(LikableObjectMixin, models.Model):
    message = models.TextField(_('Post'))
    author = models.ForeignKey(settings.AUTH_USER_MODEL, related_name='posts', blank=True, null=True)
    created = models.DateTimeField(auto_now_add=True)

南方可以使用这种继承吗?这是构建模型层次结构的合适方式吗?

Django=1.5.1

【问题讨论】:

  • 足够了class Post(LikableObjectMixin),因为其他类已经继承自models.Model
  • 我知道,但这只是一个例子,我想将此 mixin 用于可以从其他模型继承的其他模型

标签: django django-models django-south django-orm


【解决方案1】:

是的,完全没问题。 South 将为从你的 mixin 继承的所有模型创建适当的 m2m 关系。您甚至不必显式地编写 save 方法。所以:

class LikableObjectMixin(models.Model):
    likers = models.ManyToManyField(Account)

    class Meta:
        abstract = True


class Post(LikableObjectMixin):
    message = models.TextField(_('Post'))

【讨论】:

    猜你喜欢
    • 2015-10-13
    • 2018-02-08
    • 1970-01-01
    • 1970-01-01
    • 2022-12-01
    • 2022-12-27
    • 1970-01-01
    • 2019-03-02
    • 2011-11-16
    相关资源
    最近更新 更多