【问题标题】:Django: How to define the models when parent model has two foreign keys come from one same model?Django:当父模型有两个外键来自同一个模型时如何定义模型?
【发布时间】:2010-07-08 03:36:12
【问题描述】:

我想在父模型中定义两个模型字段:created_by、modified_by,它们将作为子模型的公共字段。

class ExtendedModel(models.Model):
        created_by = models.ForeignKey(User,related_name='r_created_by')
        modified_by = models.ForeignKey(User,related_name='r_modified_by')
        class Meta:
                abstract = True

class ChildModel1(ExtendedModel):
        pass

class ChildModel2(ExtendedModel):
        pass

这会产生错误,因为 ChildModel1 和 ChildModel2 在 created_by 和 modified_by 字段上的 related_name 相互冲突。

【问题讨论】:

    标签: python django django-models


    【解决方案1】:

    Django 文档解释了如何解决这个问题:http://docs.djangoproject.com/en/dev/topics/db/models/#abstract-related-name

    class ExtendedModel(models.Model):
            created_by = models.ForeignKey(User,related_name='"%(app_label)s_%(class)s_created_by')
            modified_by = models.ForeignKey(User,related_name='"%(app_label)s_%(class)s_modified_by')
            class Meta:
                    abstract = True
    
    class ChildModel1(ExtendedModel):
            pass
    
    class ChildModel2(ExtendedModel):
            pass
    

    【讨论】:

    • 我应该补充一点,根据您使用的 Django 版本,它的工作方式略有不同,因此请检查文档以确保您的版本。例如,在 1.1 中,我认为 %(app_label)s 替换不起作用,尽管 %(class)s 可以。
    • 这很好用,我之前错过了文档中的那部分。谢谢你的回答。
    猜你喜欢
    • 1970-01-01
    • 2010-10-07
    • 2021-04-01
    • 2010-10-09
    • 2019-07-30
    • 2011-04-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多