有没有办法测试unique_together?

时间:2015-09-24 17:57:48

标签: django

我使用类Meta来定义某些模型的某些唯一性。有什么方法可以测试unique_together以查看它是否有效? 我知道在Ruby on Rails中,如果我没有将某个对象保存到数据库中,save()将返回False,但我在Django中找不到类似的东西。

class SiteBrand(models.Model):
    id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
    name = models.CharField(max_length=200)
    site = models.ForeignKey(Site)  #should it be many to many?
    code = models.CharField(max_length = 200) #what is the code in sitebrand?
    created = models.DateTimeField(auto_now_add=True)
    updated = models.DateTimeField(auto_now=True)

    class Meta:
        unique_together = ("site", "code")

2 个答案:

答案 0 :(得分:0)

使用以下命令启动一个新的python shell:

python manage.py shell

然后确保导入Sitebrand模型:

from yourapp.models import Site, Sitebrand

然后尝试使用相同的站点和代码创建两个模型:

site = Site.objects.create( [the correct fields from Site here] )
Sitebrand.objects.create(name="first", site=site, code="yourcode")
Sitebrand.objects.create(name="second", site=site, code="yourcode")

当您使用相同的网站和代码键入第二行时,您会收到错误。

答案 1 :(得分:0)

您可以尝试以下操作:

class LibrarycategoryTestCase(TestCase):
    def test_unique_together(self):
        site = 'just a site'
        code = 'just a code'

        # Create the original
        original = Sitebrand.objects.create(
            site=site,
            code=code
        )

        self.assertNotEquals(original, None)

        # Attempt to create a copy
        with self.assertRaises(Exception):
            original_clone = Sitebrand.objects.create(
                site=site,
                code=code
            )