Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/312.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Django中所有型号的通用app_标签_Python_Django_Django Models - Fatal编程技术网

Python Django中所有型号的通用app_标签

Python Django中所有型号的通用app_标签,python,django,django-models,Python,Django,Django Models,我在models.py中有很多类,比如: class SomeClass1(BaseModel): question = models.ForeignKey(Question) image = models.ForeignKey(Image) class SomeClass2(BaseModel): question = models.ForeignKey(Question) option_text = models.TextField() 现在,我想在所有这

我在
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\u label='my\u app\u label1'
,如下所示:

class SomeClass1(BaseModel):
    question = models.ForeignKey(Question)
    image = models.ForeignKey(Image)
    class Meta:
        app_label = 'my_app_label1'
class BaseModel(models.Model):
    """
    For future abstraction.
    """
    class Meta:
        app_label = 'ques_app_data'
但是因为有很多类,所以我不是将
app\u label='my\u app\u label1'
添加到所有类中,而是将
app\u label='my\u app\u label1'
添加到基本模型中,如下所示:

class SomeClass1(BaseModel):
    question = models.ForeignKey(Question)
    image = models.ForeignKey(Image)
    class Meta:
        app_label = 'my_app_label1'
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
internal
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

所有子模型类都继承父
BaseModel
类的
Meta
类属性。Django将对抽象基类的
Meta
类进行一次调整,在子类中安装
Meta
属性之前,它会设置
abstract=False
。这样做是为了使抽象基类的子类本身不会自动成为抽象类

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


注意:您的项目中必须有一个名为
ques\u app\u data
的应用程序才能工作

这篇文章回答了这个问题:

有两个要点:

1) 我们一定有

class Meta:
        abstract = True
基类


2)
app\u label
ques\u app\u数据必须包含在
INSTALLED\u APPS

你的app\u名称是否与你传递给app\u label的名称匹配?不匹配,但我想为不同app的型号提供相同的app\u标签。我认为,设置中包含的名称必须相同。试试看。我想给不同应用程序的模型贴上相同的应用程序标签。你为什么要这么做?当您的模型位于django不知道它们属于哪个应用程序的位置时,将使用app_标签。是的,我这样做了,但在此之后,makemigrations没有为子类创建表。您遇到了什么错误?你能发布追踪吗?没有错误。“SomeClass1”的正常执行(不扩展基类)迁移:0003_usersubscription2.py:-创建模型usersubscription2但在扩展基类时,如果迁移是在不进行
抽象的情况下运行的,那么为
BaseModel
指定不同的名称可能会有所帮助。检查此链接。名字不是BaseModel,而是别的东西