django,related_name是什么?以及如何创建共享列以跨项目使用?

Mo *_*abi 10 python django

我试图在django中设计一个带有一些审计字段的模型.如创建,创建,更新和更新.这四列将在不同应用程序中的所有模型中重复出现.

我的第一个问题是,有没有办法放置这些列,并且每次我需要它们时都可以将它们包含在我的课程中?

我的第二个问题,下面代码中的related_name属性有什么意义?没有它,代码将返回错误,加上整个应用程序的值必须是唯一的.有没有办法确保它始终独一无二?

class Poll(models.Model):
    question=models.CharField(max_length=300)
    start_poll_at=models.DateTimeField(null=True)
    end_poll_at=models.DateTimeField(null=True)
    is_active=models.BooleanField(default=True)
    created_at=models.DateField("Created at")
    created_by=models.ForeignKey(User, db_column="created_by", related_name="poll_user_created_by")
    updated_at=models.DateTimeField("Updated at")
    updated_by=models.ForeignKey(User, db_column="updated_by", null=True, related_name="poll_user_updated_by")


class Choice(models.Model):
    choice=models.CharField(max_length=200)
    created_at=models.DateField("Created at")
    created_by=models.ForeignKey(User, db_column="created_by", related_name="poll_user_created_by")
    updated_at=models.DateTimeField("Updated at")
    updated_by=models.ForeignKey(User, db_column="updated_by", null=True, related_name="poll_user_updated_by")
Run Code Online (Sandbox Code Playgroud)

谢谢

cro*_*jer 7

试试这个:

class AbstractClass(models.Model):
    created_at=models.DateField("Created at")
    created_by=models.ForeignKey(User, db_column="created_by", related_name="poll_user_created_by")
    updated_at=models.DateTimeField("Updated at")
    updated_by=models.ForeignKey(User, db_column="updated_by", null=True, related_name="poll_user_updated_by")
    class Meta:
        abstract = True
Run Code Online (Sandbox Code Playgroud)

然后将其用作其他模型的基础:

class Poll(AbstractClass):
    question=models.CharField(max_length=300)
    start_poll_at=models.DateTimeField(null=True)
    end_poll_at=models.DateTimeField(null=True)
    is_active=models.BooleanField(default=True)
Run Code Online (Sandbox Code Playgroud)

这是关于这个的django文档:http://docs.djangoproject.com/en/dev/topics/db/models/#abstract-base-classes