【问题标题】:Django class method is currently overriddenDjango 类方法当前被覆盖
【发布时间】:2018-06-03 11:41:37
【问题描述】:

这是我尝试在命令行中运行python manage.py makemigrations 时出现的错误

ERRORS:
asking.Question: (models.E020) The 'Question.check()' class method is currently overridden by <function BaseManager.check at 0x7f0f104889d8>.

这是models.py 中的Question 类:

class Question(BaseModel):
    content = models.CharField(max_length=250)
    answer = models.TextField("answer", blank=True, null=True)
    answerer = models.ForeignKey(
        User,
        on_delete=models.CASCADE,
        related_name="questions"
    )

    def __str__(self):
        return self.content

这是 BaseModel 类:

from django.db import models
from model_utils.models import SoftDeletableManager, TimeStampedModel


class BaseModel(SoftDeletableManager, TimeStampedModel, models.Model):

    class Meta:
        abstract = True

我使用的是 Django 2.0.5 版

【问题讨论】:

  • 你改变了这个模型吗?变化前的情况如何?
  • 我之前没有换过型号
  • 也许问题出在用户模型上?你能提供吗?
  • 如果其他原因不需要,可以在Model中更改BaseModel
  • 我在 django.contrib.auth.models 中使用用户模型

标签: django django-models


【解决方案1】:

我认为问题在于您的 BaseModel 源自 SoftDeletableManager 而不是 SoftDeletableModel

例如更改为:

class BaseModel(SoftDeletableModel, TimeStampedModel, models.Model):

    class Meta:
        abstract = True

【讨论】:

    【解决方案2】:

    管理器应该设置为模型属性

    from django.db import models
    from model_utils.models import SoftDeletableManager, TimeStampedModel
    
    
    class BaseModel(TimeStampedModel, models.Model):
    
        objects = SoftDeletableManager()
    
        class Meta:
            abstract = True
    

    【讨论】:

      猜你喜欢
      • 2013-09-15
      • 2011-12-13
      • 1970-01-01
      • 2011-01-19
      • 1970-01-01
      • 2014-07-29
      • 2014-07-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多