gpt4 book ai didi

django - 了解 Django 模型继承怪癖

转载 作者:行者123 更新时间:2023-12-01 11:02:00 25 4
gpt4 key购买 nike

我无法理解为什么某些模型中存在某些属性,所以我希望有人可以在这里解释它们。

这是一个基本的例子:

class Alpha(models.Model):
one = models.PositiveIntegerField()


class Bravo(Alpha):
two = models.PositiveIntegerField()


class Charlie(Alpha):
three = models.PositiveIntegerField()


"bravo" in dir(Charlie())
True

Charlie 的实例如何具有 bravo 属性?是否有一个原因?我错过了什么吗?

更重要的是,为什么这会阻止我向 Charlie 类添加 bravo 属性?

...
class Charlie(Alpha):
three = models.PositiveIntegerField()
bravo = models.TextField()


Charlie()
ValueError: Cannot assign "''": "Charlie.bravo" must be a "Bravo" instance.

最佳答案

据我所知,这是因为父类对其所有后代都有一个隐式外键,而该外键又由子类继承。事实上,这可能不应该发生,但可能没有任何方法可以阻止它。

一种可能是 explicitly set the parent link在 Bravo 上,以便其 related_name 不是“bravo”,这样您就可以在 Charlie 中重用该名称。

class Bravo(Alpha):
two = models.PositiveIntegerField()
alpha = models.OneToOneField(Alpha, parent_link=True, related_name='not_bravo')

关于django - 了解 Django 模型继承怪癖,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9903021/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com