django测试-确认模型是唯一的,这取决于另一个字段

django测试-确认模型是唯一的,这取决于另一个字段,django,django-testing,Django,Django Testing,我只是从django测试开始,所以我仍然在努力解决这个问题 我有两个模型。比如说主题和子主题 class Topic(models.Model): name = models.CharField(max_length=1, unique=True) class SubTopic(models.Model): topic = ForeignKey(Topic) name = models.CharField(max_length=1) 我想设置一个测试用例来检查这是否可

我只是从django测试开始,所以我仍然在努力解决这个问题

我有两个模型。比如说
主题
子主题

class Topic(models.Model):
    name = models.CharField(max_length=1, unique=True)

class SubTopic(models.Model):
    topic = ForeignKey(Topic)
    name = models.CharField(max_length=1)
我想设置一个测试用例来检查这是否可行:

topic: 1
    subtopic:a (pk=1)
    subtopic:b (pk=2)
    subtopic:c (pk=3)

topic: 2
    subtopic:a (pk=4)
    subtopic:b (pk=5)
    subtopic:c (pk=6)
topic: 1
    subtopic:a (pk=1)
    subtopic:a (pk=2)
    subtopic:c (pk=3)
但这是不可能的:

topic: 1
    subtopic:a (pk=1)
    subtopic:b (pk=2)
    subtopic:c (pk=3)

topic: 2
    subtopic:a (pk=4)
    subtopic:b (pk=5)
    subtopic:c (pk=6)
topic: 1
    subtopic:a (pk=1)
    subtopic:a (pk=2)
    subtopic:c (pk=3)
我对如何做到这一点的猜测:

def test_subtopics_cant_have_same_name(self):
    topic_1 = Topic.objects.create(name='1')
    suptopic_name = 'a'
    subtopic_1 = SubTopic.objects.create(name=subtopic_name)
    subtopic_2 = SubTopic.objects.create(name=subtopic_name)
    subtopics = [ topic.name for topic in topic.subtopic_set.all()]
    self.assertEqual(subtopics.count(subtopic_name),1)
这条路对吗

奖金问题

我对解决这个问题的逻辑的猜测是:

class SubTopic(models.Model):
    topic = ForeignKey(Topic)
    name = models.CharField(max_length=1)

    def save(*args, **kwargs):
        subtopics = [ topic.name for topic in topic.subtopic_set.all()]
        if name in subtopics:
            raise IntegrityError('subtopic not unique for this topic')
        else:
            super(SubTopic, self).save(*args, **kwargs)
但我不确定是否有更好的方法。。?因为现在在检查之前测试失败了。(保存子主题_2时失败)

您可以使用并捕获:

test\u唯一性
测试将失败,直到您设置:


这样做不会让第一个场景发生。我将对我的问题进行编辑以使其更清楚,我的意图是子主题
1.a
2.a
是不同的“a”。@Ben ok,很抱歉误解了。我已经编辑了我的答案:我想你的意思是
主题
名称
都是
独一无二的
——检查它是否适合你。谢谢