抽象Django模型中的app_label

3 投票
1 回答
1919 浏览
提问于 2025-04-15 22:18

我在Django中尝试创建一个抽象模型,但在设置相关名称时遇到了麻烦,具体可以参考这里的建议:http://docs.djangoproject.com/en/dev/topics/db/models/#be-careful-with-related-name

我的抽象模型长这样:

class CommonModel(models.Model):

    created_on = models.DateTimeField(editable=False)
    creared_by = models.ForeignKey(User, related_name="%(app_label)s_%(class)s_created", editable=False)
    updated_on = models.DateTimeField(editable=False)
    updated_by = models.ForeignKey(User, related_name="%(app_label)s_%(class)s_updated", editable=False)

    def save(self):
        if not self.id:
            self.created_on = datetime.now()
            self.created_by = user.id

        self.updated_on = datetime.now()
        self.updated_by = user.id
        super(CommonModel, self).save()

    class Meta:
        abstract = True

我的公共模型在[project_root]/models.py里。它是这个模型的父对象,而这个模型位于一个叫做Feedback的应用中,路径是[project_root]/feedback/models.py:

from django.db import models
from mediasharks.models import CommonModel

class Feedback(CommonModel):
    message = models.CharField(max_length=255)
    request_uri = models.CharField(max_length=255)
    domain = models.CharField(max_length=255)
    feedback_type = models.IntegerField()

简单来说,我想建立一个公共模型,这样我就能随时知道数据库条目是何时由谁创建的。

当我运行“python manage.py validate”时,出现了这个错误信息:KeyError: 'app_label'

我是不是漏掉了什么?

1 个回答

1

注意你链接上加粗的文字:“在开发版本中更改”。如果你没有使用最新的Django开发版本,比如说你在用最新发布的版本1.1,那么你应该使用这个链接来查看文档。那个版本的内容没有提到app_label,因为那个时候这个概念还没有被引入。

撰写回答