Django中的模型如何与数据库同步?

时间:2013-08-19 08:43:09

标签: django django-models django-testing

在Django中,您可以通过在tests模块中创建模型来创建仅用于测试的模型:

from django.db import models
from django.test import TestCase

class TestModel(models.Model):
    # attributes

class MyTest(TestCase):
    def test_something(self):
        # do something with TestModel

现在我想知道syncdb命令如何知道,该模型也必须同步到数据库。

我搜索了Django的代码,但我找不到任何明显的代码。与syncdb相关的所有代码仅适用于应用内的models模块,但从不查看tests模块。


修改:只是为了清楚一点:我的问题的目标是,syncdb如何从应用程序创建正常模型{{1}如果测试正在运行,则{em>和来自models模块的模块仅来自tests模块的模块。

目标不是为测试创建实例。

2 个答案:

答案 0 :(得分:0)

Django动态创建一个新的空白数据库来运行测试,因此如果您只有用于测试的模型,则不需要通过syncdb将它们添加到主数据库中。

这在以下文档中讨论: https://docs.djangoproject.com/en/dev/topics/testing/overview/#the-test-database

答案 1 :(得分:-1)

使用固定装置。 Django将创建test_database并将所有模型放入此数据库并添加测试数据(在fixture中描述)。 请参阅here

此外,在您的tests.py中添加类似

的内容
from django.test import TestCase
from django.test.client import Client

class MyTest(TestCase):
    fixtures=["fixture.yaml","fixture.json"]

    def setUp(self):
        celf.c = Client()        

    def test_something(self):
        resp = self.client.get("/")
        self.assertContains(resp,"Something from fixtures.")

Something from your fixture是必须在"/"视图功能页面上打印的字符串。 这是我用来测试我的观点和模型的方式 此外,您可以从现有开发数据库转储数据,使用manage.py dumpdata

祝你好运。