【问题标题】:Python - Inherit from class which inherit ModelPython - 从继承模型的类继承
【发布时间】:2017-08-28 12:48:05
【问题描述】:

这是我的问题:我尝试在

下创建图层
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

【问题讨论】:

  • 你读过model inheritence上的文档了吗?
  • 使用user_id 代替id
  • 不,当然,如果我问 )) 好的,我找到了我丢失的东西

标签: python django inheritance


【解决方案1】:

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

【讨论】:

  • 另外,您可以将 MainModel 设为一个 mixin,它仅继承自 object,然后您的实际模型可以是 class User(MainModel, models.Model)
  • 是的,谢谢 :) 这是我的尝试之一,但我想尽可能多地了解,并且必须了解如何才能做到这一点)
【解决方案2】:

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

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

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

Django 已经为你的父模型添加了一个字段 id。

【讨论】:

  • 但是如果我直接在类中创建它,继承models.Model一切都很好-在db中成功创建字段id
猜你喜欢
  • 2018-05-23
  • 1970-01-01
  • 1970-01-01
  • 2018-03-10
  • 1970-01-01
  • 1970-01-01
  • 2010-11-08
  • 2023-03-27
  • 1970-01-01
相关资源
最近更新 更多