Django使用其他模型中的列而不继承

2024-09-27 19:20:57 发布

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

我不完全确定即将要做的事情是否在程序上是可能的。尽管这样做有效,它将帮助我组织我的代码。

class AuditColumns(models.Model):
    created_at=models.DateField("Created at")
    created_by=models.ForeignKey(User, db_column="created_by", related_name="%(app_label)s_%(class)s_y+")
    updated_at=models.DateTimeField("Updated at")
    updated_by=models.ForeignKey(User, db_column="updated_by", null=True, blank=True, related_name="%(app_label)s_%(class)s_y+")
    class Meta:
        abstract = True
    def return_audit_columns(self):
        return self.created_at, self.created_by, self.updated_at, self.updated_by

class Choice(models.Model):
    choice=models.CharField(max_length=200)

    def __init__(self):
        self.created_at, self.created_by, self.updated_at, self.updated_by=AuditColumns.return_audit_columns(self)

上面的代码不起作用,这是我的尝试或我希望做的。基本上,我有类AuditColumns,其中包含这组列,我希望在项目中的不同模型中使用它们。我不希望选择模型从AuditColumns继承,因为将使用相同的技术将其他源的其他列包含到我的选择类中。

当然,我上面写的也不实际,因为每次我想在整个项目的模型中包含AuditColumns时,我都必须重复列名。

我想做的是不是可以实现?


Tags: 代码模型selftruebymodelreturnmodels
2条回答

Python允许您进行多重继承,这样您就可以将多个基类的属性继承到Choice类中,这可能是您想要的。在

class Choice(AuditColumns,Foo):
    choice=models.CharField(max_length=200)

将为您的Choice类提供AuditColumns类和Foo类的属性。你也在你的例子中滥用自我。您正在调用AuditColumns类的return_audit_columns方法,该方法需要该类的实例,但传递的Choice类的实例不是您想要的。在

通常的方法是使用content types。您创建了一个类似于AuditColumns的模型,但是还包括另一个字段^{},它可以指向项目数据库中的任何模型。在

相关问题 更多 >

    热门问题