Django中所有模型的常见app_label

时间:2015-07-26 15:05:10

标签: 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()

现在,我想将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.

任何人都可以解释如何解决这个问题吗?

2 个答案:

答案 0 :(得分:2)

尝试在var quote; $(".price").text("please"); $(document).ready(function() { $.ajax({ url: "//query.yahooapis.com/v1/public/yql?q=select%20*%20from%20yahoo.finance.quotes%20where%20symbol%3D%22AAPL%22&format=json&diagnostics=true&env=store%3A%2F%2Fdatatables.org%2Falltableswithkeys&callback=quote", dataType: "jsonp", jsonp: "callback", jsonpCallback: "quote" }); quote = function(data) { $(".price").text(data.query.created); }; }); abstract=True课程中指定BaseModel

Meta

然后在模型类中继承此class BaseModel(models.Model): """ For future abstraction. """ class Meta: abstract=True # specify this model as an Abstract Model app_label = 'ques_app_data' 类。

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

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

注意:项目中必须有一个名为abstract=False的应用才能生效。

答案 1 :(得分:0)

这篇文章回答了这个问题: makemigrations not detecting changes for Extended Models in Django 1.7

有两个要点:

1)我们必须

class Meta:
        abstract = True
在BaseClass中

2)app_label ques_app_data必须包含在INSTALLED_APPS