我希望一个字段是一个抽象对象的OneToOneField域,抽象将永远不会使用,而是将用于子类:

from django.db import models

class Abs(models.Model):
    useType = True
    absName = models.CharField(max_length=10, default='mickey', blank=True)

    class Meta:
        abstract = True
from django.db import models
from .abs import Abs

class Sub(Abs):
    useType = False
    name=models.CharField(max_length=10, default='', blank=True)
from django.db import models
from .abs import Abs

class ParentClass(models.Model):
    abs = models.OneToOneField(Abs, on_delete=models.CASCADE)

但在进行移民时,我收到以下错误:

books.ParentClass.abs: (fields.E300) Field defines a relation with model 'Abs', which is either not installed, or is abstract.
books.ParentClass.abs: (fields.E307) The field books.ParentClass.abs was declared with a lazy reference to 'books.abs', but app 'books' doesn't provide model 'abs'.

如果Abs是一个真实的对象,一切都很好,但Abs永远不应该是一个真实的对象,所以我认为应该是抽象的,它只是一个公共信息/方法的篮子,一个接口.

有办法做到这一点吗?

非常感谢

推荐答案

不能有对抽象类的任何引用字段(ONEtoONE、ManyToOne、ForeignKey),因为它们在数据库中没有对应的表.

保留您已有的代码,但取消:

    class Meta:
            abstract = True

应该会没事的.

您的数据库将有一个Abs表,其中包含所有Abs对象及其常规属性,规范将包含具有额外属性的相同对象.

Django相关问答推荐

在 Trunc 的 kind 属性中使用字段

DJANGO 获得模型中发现的第一、第二和第三大价值

如果字段为空,则 Unique_together 不起作用.怎么约束呢?

我如何获得已循环的每个项目的名称?

Django 获取用户创建的对象,这些用户属于用户列表

如何在不编写每个视图中的逻辑的情况下呈现值,Django?

NoneType对象没有属性保存Django

在Django Rest Framework中按模型属性排序时如何避免重新计算?

防止 django 将_id附加到外键字段

Django过滤器查询外键

如何解决 AssertionError: .accepted_renderer not set on Response in django and ajax

多租户 Django 应用程序:根据请求更改数据库连接?

更好的 ArrayField 管理小部件?

在 Django 的 ORM 中访问存储过程的最佳方法是什么

Django,如何从模型表单的 Select 字段中删除空白 Select ?

使用基于日期/时间的对象进行 Django 单元测试

有 Django List View 模型排序吗?

Django 有 SmallIntegerField 的原因是什么?

在 django admin 中链接到外键对象

Django 测试 - 在所有测试中修补对象