django.db.utils.OperationalError:没有这样的表-在从非托管模型继承的模型上进行操作

问题描述

我在为一个应用程序构建数据库架构时遇到问题,该应用程序包括带有图像的模型,并且已预先加载了一些认数据。这个想法是,应用程序启动时会使用认数据(静态图片)进行预填充,但之后用户可以上传自己的图片

为简化起见,假设模型只有两个字段-shared_oneimage

class Some(models.Model):
    shared_one = models.CharField()
    image = [???]

我尝试将image定义为FileField,但不适用于静态文件-在创建新记录Some时,模型将尝试将新文件image保存到MEDIA_ROOT目录。

然后我发现Django引入了用于管理模型中的静态文件的字段类型-FilePathField,但显然它不符合用户上传文件

然后我想到了将Some做成这样的抽象类的想法:

class Some(models.Model):
    class Meta:
        abstract = True
    shared_one = models.CharField()


class DefaultSome(Some):
    media = models.FilePathField()


class UseRSSome(Some):
    media = models.FileField()

方法的问题在于,DefaultSomeUseRSSome现在已经完全不同了-例如,我无法使用media到{{1 }},我需要为每个将使用ForeignKey的新模型创建不同的模型集(和数据库表),这似乎效率极低。

我也尝试将Some创建为非托管模型,但是它根本不起作用。具有这样定义的模型:

media

我试图运行生成认数据的脚本。脚本如下所示:

Some

但是它失败,并显示错误class Some(models.Model): class Meta: managed = False shared_one = models.CharField() class DefaultSome(Some): media = models.FilePathField() class UseRSSome(Some): media = models.FileField() 。 (???)

我的数据结构设计不当吗?我应该使用完全不同的方法吗?

解决方法

可能已执行了伪迁移。打开数据库打开表your_project.django_migrations,然后搜索创建模型的迁移文件名。 从表中删除该迁移记录,然后再次执行迁移。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...