Djang中抽象模型类与多重继承的结合

2024-04-20 03:35:18 发布

您现在位置:Python中文网/ 问答频道 /正文

我有三个示范班:

django.contrib.auth.models.User,引用为User

mysite.models.Profile,引用为Profile

mysite.models.Subscriber,引用为Subscriber

Profile以文档中的well described的方式从User继承,作为向{}模型添加自定义属性的解决方案,而不必担心可交换模型(仅在1.5版中添加)。在

虽然Profile和{}是不同的对象,但它们确实有一些共同的属性。也就是说,我希望以类似的方式将自定义主键算法与and重写save()方法一起使用,以便代码可以按照DRY重用。现在,如果这两个类都是普通模型类,那就很简单了:

class BaseProfile(models.Model):
    key = models.PositiveIntegerField(primary_key=True)
    activated = models.BooleanField(default=False)
    ...

    class Meta:
        abstract = True

    def save():
        ...

class Profile(BaseProfile):
   ...

class Subscriber(BaseProfile):
   ...

然而,Profile已经使用了多表继承。我在想一个类似的方法:

^{pr2}$

有可能吗?如果是这样,那么在我的例子中需要什么样的继承顺序,以便以正确的方式调用模型字段和save()方法?两个模型类的Meta不会发生冲突吗?在


Tags: 方法key模型true属性modelssave方式
1条回答
网友
1楼 · 发布于 2024-04-20 03:35:18

链接到的文档没有描述通过多表继承从用户继承。它解释了你可以使用一个OneToOneField链接一个类似“profile”的对象。尝试:

class Profile(BaseProfile):
    user = models.OneToOneField(User, blank=True, null=True, on_delete=models.CASCADE)
    ...

不过,我想你其实并不希望blank=True和null=True。在

这种方法确实意味着您的用户对象很可能没有与其对应的概要文件对象相同的主键,但这对您来说是可以的。在

相关问题 更多 >