gpt4 book ai didi

python - Django 测试 : DatabaseError: no such table for ManyToManyField

转载 作者:太空狗 更新时间:2023-10-30 00:17:58 24 4
gpt4 key购买 nike

我已经为非常简单的博客应用编写了几个测试,但是当我运行测试时多对多关系失败了:./manage.py test myblog

DatabaseError: no such table: myblog_post_tag

然而,当我执行 ./manage.py sql myblog 时:

BEGIN;
CREATE TABLE "myblog_tag" (
"id" integer NOT NULL PRIMARY KEY,
"name" varchar(50) NOT NULL
)
;
CREATE TABLE "myblog_post_tag" (
"id" integer NOT NULL PRIMARY KEY,
"post_id" integer NOT NULL,
"tag_id" integer NOT NULL REFERENCES "myblog_tag" ("id"),
UNIQUE ("post_id", "tag_id")
)
;
CREATE TABLE "myblog_post" (
"id" integer NOT NULL PRIMARY KEY,
"title" varchar(200) NOT NULL,
"pub_date" datetime NOT NULL,
"content" text NOT NULL
)
;
COMMIT;

它确实创建了一个表,但在测试时却没有这样做?任何帮助表示赞赏。这是我的测试:

class TagModelTest(TestCase):

def test_create_tags_for_posts(self):
# tests tagging posts, postodd will have tags 1 & 3, posteven will be 2 & 4
postodd = Post(
title="testing odd tags",
pub_date=timezone.now(),
content='''hello everybody, we are testing some tagging
functionality here. This post should have odd tags.''',
)
posteven = Post(
title="test even tags",
pub_date=timezone.now(),
content ='''hello everybody, we are testing some tagging
functionality here. This post should have even tags.''',
)
#save them to db
postodd.save()
posteven.save()

# create the tags
tag1 = Tag(name="1")
tag2 = Tag(name="2")
tag3 = Tag(name="3")
tag4 = Tag(name="4")

# save all tags to db
tag1.save()
tag2.save()
tag3.save()
tag4.save()

# create the many2many relationship
postodd.tag.add(tag1)

如果需要,还有我的 models.py:

from django.db import models


class Tag(models.Model):
name = models.CharField(max_length=50)

def __unicode__(self):
return self.name


class Post(models.Model):
tag = models.ManyToManyField(Tag)
title = models.CharField(max_length=200)
pub_date = models.DateTimeField(verbose_name="Date published")
content = models.TextField()

def __unicode__(self):
return self.title

最佳答案

./manage.py sql myblog 不执行 SQL,它只是输出如果您运行 syncdb 执行的内容。

在这种情况下,您的数据库中似乎缺少该表。

如果这是对现有应用进行修改的结果;例如,您刚刚向模型添加了一个新字段;然后运行 ​​syncdb 不会影响对数据库的更改。 syncdb 不执行任何破坏性操作(如添加或删除表或列)。

在这种情况下,您可以手动运行查询来添加列;或使用 syncdb 删除并重新创建您的表。

由于这是一个常见问题,大多数人使用数据迁移工具,如 south为您处理这些变化。 South 将智能地管理这些小的变化。

关于python - Django 测试 : DatabaseError: no such table for ManyToManyField,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12151988/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com