- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我尝试用谷歌搜索这个问题,但我看到的答案大多来自 Django 版本,其中迁移需要 South 和/或 syncdb
仍然是一个问题。相关的匹配症状,但不匹配原因。
我从 Django 在执行 django-admin startproject project-name
和 django-admin startapp products
时创建的默认项目/应用程序开始。
from django.db import models
from django.contrib.auth.models import User
from django.core.exceptions import ObjectDoesNotExist
# Create your models here.
class Artist(models.Model):
user = models.OneToOneField(User, null=True, blank=True)
name = models.CharField(max_length=50)
def __str__(self): return "<Artist: %s>"%self.name
class Category(models.Model):
artists = models.ManyToManyField(Artist)
name = models.CharField(max_length=50)
desc = models.CharField(max_length=200)
我的过程:
python manage.py flush
清空数据库rm -rf products\migrations
删除之前的迁移python manage.py 迁移
输出:
Operations to perform:
Apply all migrations: sessions, contenttypes, auth, admin
Running migrations:
No migrations to apply.
python manage.py makemigrations 产品
输出:
Migrations for 'products':
0001_initial.py:
- Create model Artist
- Create model Category
python manage.py 迁移
输出:
Operations to perform:
Apply all migrations: contenttypes, admin, sessions, products, auth
Running migrations:
No migrations to apply.
在这一点上,我很困惑。没有要应用的迁移,但是没有任何迁移吗?尽管如此,我还是继续前进。
python manage.py shell
在这个 shell 中,我输入了这些命令:
>>> from products.models import *
>>> artist = Artist(name="foo")
>>> artist.save()
>>> categ = Category(name="bar", desc="baz")
>>> categ.save()
>>> categ.artists.add(artist)
此时,我得到了一个巨大的错误回溯。问题似乎是这样的:
django.db.utils.OperationalError: no such table: products_category_artists
如果我尝试使用内置管理站点,我会看到同样的错误。
我的猜测是,问题是迁移并未实际被应用或特定表未被创建,但我不知道如何解决这些问题中的任何一个。
最佳答案
django 生成了一个名为 django_migrations
的表,它跟踪已应用的迁移。如果你删除你的迁移,重新生成它们并尝试迁移而不从表中删除记录,那么 django 会认为它已经应用了它们。你不应该删除你的迁移,它会导致 django 变得困惑。
如果您正在积极开发并想跳过整个迁移系统,您可以,但是一旦您开始使用迁移,就永远不要删除它们。这是我在开发新项目时使用的:
dropdb mydb && createdb mydb && python manage.py migrate --run-syncdb && python manage.py loaddata initial
首先,它会删除数据库和所有数据。然后它创建一个空的。 --run-syncdb
生成架构,loaddata
从 fixtures file 加载数据.
因此,如果您仍在开发并且可以删除所有数据并将您关心的内容移动到固定文件,那么您可以删除所有迁移文件夹并在每次更改模型时运行上面的命令。
关于Django 1.9 - 操作错误 : no such table: products_category_artists; due to ManyToManyField?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37397858/
我尝试用谷歌搜索这个问题,但我看到的答案大多来自 Django 版本,其中迁移需要 South 和/或 syncdb 仍然是一个问题。相关的匹配症状,但不匹配原因。 我从 Django 在执行 dja
我是一名优秀的程序员,十分优秀!