我有一个模型,Entry.
特别值得注意的是它的addTags
功能,它向实例添加标签Entry
并保存它。这是该类的完整代码:
class Entry(models.Model):
title = models.CharField(max_length=80)
author = models.ForeignKey(User)
pubdate = models.DateTimeField()
tags = models.ManyToManyField(Tag)
text = models.TextField()
def getAllTags(self):
'''
Returns all tags applied to a given entry
'''
return self.tags.all()
def addTag(self, tagName):
'''
Add a tag to an entry. If tag does not exist, create it. If tag has
already been added, do nothing.
'''
try:
tag = Tag.objects.get(name=tagName)
return tag
except Tag.DoesNotExist:
tag = self.tags.create(name=tagName)
self.save()
return tag
奇怪的是,当我使用以下代码测试 addTag 函数时(entry1 是之前创建的,并且是一个有效的 Entry 对象):
tag1 = entry1.addTag("testtag2")
tag2 = entry1.addTag("testtag2")
tag3 = entry1.addTag("testtag3")
tagList = [tag1, tag2, tag3]
for listTag, objTag in zip(tagList, entry1.tags.all()):
print "%s: %s" % (listTag, objTag)
self.assertEqual(entry1.tags.all(), tagList)
我收到以下断言错误:
AssertionError: [<Tag: testtag>, <Tag: testtag2>, <Tag: testtag3>] != [<Tag: testtag>, <Tag: testtag2>, <Tag: testtag3>]
然而,上面代码中的 print 语句给了我以下信息:
testtag: testtag
testtag2: testtag2
testtag3: testtag3
表示标签已按预期创建。似乎每个标签对象的不同内存位置都已创建,但我不明白这是怎么回事。想法?