编辑:关于我的要求似乎有些混乱.该模型适用于我在迁移0009中创建的Postgres view.我的印象是Django如果具有managed = False选项,则不会为模型生成迁移.但是,它仍在努力创造它.
另外,我正在使用Django 1.8和Python 3.4.
我在为Postgres视图创建Django模型时遇到了麻烦,使用这些链接作为指南:0700和eceppda’s在Can I use a database view as a model in django中回答.我还在Django’s API docs中查找了Options.managed条目.但是,即使这样,它也在创建一个迁移为视图的模型添加一个表.
到目前为止这是我的代码:
富/ models.py
class RelevantModel(models.Model):
rebate_pool_total = models.OnetoOneField('foo.VirtualTotal', null=True)
total = models.DecimalField(null=True, decimal_places=2, max_digits=32)
class VirtualTotal(models.Model):
relevant_model = models.ForeignKey('foo.RelevantModel')
total = models.DecimalField(null=True, decimal_places=2, max_digits=32)
class Meta:
managed = False
富/迁移/ 0009_add_foo_view.py
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from django.db import models, migrations
class Migration(migrations.Migration):
dependencies = [
('foo', '0008_prevIoUs_migration'),
]
sql = """
create VIEW foo_virtualtotal AS
SELECT rest of view...
"""
operations = [
migrations.Runsql('DROP VIEW IF EXISTS foo_virtualtotal;'),
migrations.Runsql(sql)
]
我究竟做错了什么?
解决方法:
Django确实为您应用中的每个新添加的表创建了一个迁移,无论它是否是托管模型.但是,当您使用managed = False设置时,存在非常重要且微妙的差异.结果迁移是虚拟条目.它根本不执行任何sql.
class Dummy(models.Model):
something = models.IntegerField()
class Meta:
managed = False
现在当你按照sqlimigrate * myapp * * migration_number *进行makemigrations时,你会发现它不会产生任何sql.
另一方面,如果您确实发现Django正在尝试为您创建一个表,那通常意味着您之前存在相同的模型,但是在管理模型时.要确认这一点,请在迁移文件夹中搜索VirtualTotal,它是相关模型的名称.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。