我有以下型号。
BaseClass1
和BaseClass2
是模型使用的抽象模型。
在这种情况下,视图集和序列化程序使用模型AdBreak
。
当我运行python manage.py makemigrations
时,会检测AdBreak
模型上的更改。模型AdBreakStatus
未创建。
由于AdBreakStatus
与AdBreak
相关联,因此我预计也会迁移AdBreakStatus
。我的理解错了吗?
修改
在初始状态下,只有AdBreak和BaseClass1模型。添加了新状态AdBreakStatus和BaseClass2模型。 AdBreak的一些字段已移至AdBreakStatus。
提前感谢您的帮助。
class BaseClass1(models.Model):
class Meta:
abstract=True
timestamp = models.DateTimeField(auto_now_add=True)
class BaseClass2(models.Model):
class Meta:
abstract=True
other_field = models.IntegerField()
class AdBreak(BaseClass1):
class Meta:
db_table = "ad_break"
ad_break_id = models.AutoField(primary_key=True)
... # Other fields
class AdBreakStatus(BaseClass2):
class Meta:
db_table = "ad_break_status"
ad_break = models.ForeignKey(AdBreak)
... # Other Fields
答案 0 :(得分:1)
序列化程序AdBreakSerializer
序列化了模型AdBreak
。
将AdBreakStatus
模型导入AdBreakSerializer
文件。
现在检测并迁移了AdBreakStatus
模型。
这种方法的问题在于,不使用导入,因此不遵循标准。
将AdBreakStatus
模型类写在AdBreak
的同一文件中。这也将解决问题。
makemigrations
脚本查找从urls.py
连接的模型。该脚本从urls.py
导航到所有视图集,然后导航到相应的序列化器和模型。
需要迁移的所有模型都应该进入此遍历的路径。 OR 只迁移以这种方式遍历的模型。
答案 1 :(得分:0)
如果有人犯了与我相同的错误,就我而言,这是因为我添加的字段与现有属性具有相同的名称。因此,请确保尚未使用该字段名称。
答案 2 :(得分:-1)
首先执行此操作:
python manage.py makemigrations 'your-app'
python manage.py migrate
如果上述操作无法检测到更改,请删除迁移文件夹,打开数据库并打开表django_migrations。您将看到与您的应用相关联的迁移,删除记录,然后执行makemigrations和迁移。
答案 3 :(得分:-2)
删除迁移文件夹和sqlite文件。然后运行
python manage.py makemigrations 'app_name'
python manage.py migrate