Tôi đã viết một vài bài kiểm tra cho ứng dụng viết blog thực sự đơn giản, nhưng nhiều mối quan hệ thất bại khi tôi chạy thử nghiệm: ./manage.py test myblog
Django thử nghiệm: DatabaseError: không có bảng như vậy cho ManyToManyField
DatabaseError: no such table: myblog_post_tag
Tuy nhiên, khi Tôi làm ./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;
Tạo bảng, nhưng không thực hiện được trong khi thử nghiệm? Bất kỳ trợ giúp được đánh giá cao. Dưới đây là thử nghiệm của tôi:
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)
Và models.py của tôi nếu cần thiết:
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
Nhưng tôi không sử dụng syncdb. Ngay bây giờ tôi chỉ chạy thử nghiệm, vì vậy khi tôi chạy thử nghiệm, liệu nó có tạo ra một cơ sở dữ liệu thử nghiệm không? – binarymac