Python - 从继承Model的类继承

时间:2017-08-28 12:48:05

标签: python django inheritance

这是我的问题:我尝试在

下创建图层
models.Model 

我的模特 -

class MainModel(models.Model):
    @staticmethod
    def getIf(condition):
        results = __class__.objects.filter(condition)
        if results.count() > 0:
            return results.first()
        else:
            return None

那是一个模特

class User(MainModel):
    id = models.AutoField(primary_key=True)
    name = models.CharField(max_length=256)
    date_create = models.DateTimeField(auto_now_add=True)
    date_last_login = models.DateTimeField(null=True)

但是我的项目被粉碎了 -

  

django.core.exceptions.FieldError:本地字段' id'在班级'用户'   与基类' MainModel'。

中的同名字段发生冲突

我做错了什么?

UPD:如果你想这样做,你需要在你的图层

中使用子类Meta
class MainModel(models.Model):
    @staticmethod
    def getIf(condition:dict):
        results = __class__.objects.filter(condition)
        if results.count() > 0:
            return results.first()
        else:
            return None

    class Meta:
        abstract = True

2 个答案:

答案 0 :(得分:2)

Thanx,但我没有尝试覆盖字段,在我的图层中没有定义任何一个字段。我找到了答案,我只需要阅读文档。

如果你想这样做,你需要在你的图层

中使用子类Meta
class MainModel(models.Model):
    @staticmethod
    def getIf(condition:dict):
        results = __class__.objects.filter(condition)
        if results.count() > 0:
            return results.first()
        else:
            return None

    class Meta:
        abstract = True

答案 1 :(得分:1)

Django为所有模型添加了一个字段id,您必须将其删除。

好的,我现在更好地理解你的问题,你的答案就在那里:

In Django - Model Inheritance - Does it allow you to override a parent model's attribute?

Django已经在您的父模型中添加了一个字段ID。