gpt4 book ai didi

python - Django 中所有模型的通用 app_label

转载 作者:行者123 更新时间:2023-11-28 22:42:30 24 4
gpt4 key购买 nike

我在 models.py 中有很多类,例如:

class SomeClass1(BaseModel):
question = models.ForeignKey(Question)
image = models.ForeignKey(Image)

class SomeClass2(BaseModel):
question = models.ForeignKey(Question)
option_text = models.TextField()

现在,我想将 app_label = 'my_app_label1' 添加到所有这些类中,如下所示:

class SomeClass1(BaseModel):
question = models.ForeignKey(Question)
image = models.ForeignKey(Image)
class Meta:
app_label = 'my_app_label1'

但是因为有很多类,所以我没有将 app_label = 'my_app_label1' 添加到所有类,而是将 app_label = 'my_app_label1' 添加到 BaseModel ,像这样:

class BaseModel(models.Model):
"""
For future abstraction.
"""
class Meta:
app_label = 'ques_app_data'

之后我收到此错误:

myapp.SomeClass1.basemodel_ptr: (fields.E300) Field defines a relation with model 'BaseModel', which is either not installed, or is abstract.

谁能解释一下如何解决这个问题?

最佳答案

尝试在 BaseModel 内部 Meta 类中指定 abstract=True

class BaseModel(models.Model):
"""
For future abstraction.
"""
class Meta:
abstract=True # specify this model as an Abstract Model
app_label = 'ques_app_data'

然后在您的模型类中继承这个 BaseModel 类。

所有子模型类都继承了父类BaseModelMeta 类属性。 Django会对抽象基类的Meta类做一个调整,在给子类设置Meta属性之前,设置abstract=False。这样做是为了让抽象基类的子类本身不会自动成为抽象类。

完成此操作后,您将需要再次运行迁移。

注意:您的项目中必须有一个名为 ques_app_data 的应用程序才能工作。

关于python - Django 中所有模型的通用 app_label,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31638500/

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