访问__unicode __()的正确方法是什么?

时间:2011-04-06 12:40:50

标签: django

我有以下课程:

class Whuffie(models.Model):
    """Holds the amount of whuffie an engineer has earned in each project"""

    engineer = models.ForeignKey(User)
    project = models.ForeignKey(Project, related_name="related_project")
    whuffie = models.IntegerField(blank=False, null=False
    experience = models.IntegerField(blank=False, null=False)
    mana = models.IntegerField(blank=False, null=False)

    def __unicode__(self):
        return u"%s (%s)" % (self.engineer.__str__() + self.project.__str__())

我在 unicode ()中正确使用 str ()?

在我的测试中,我想看看记录是否已正确创建,我仍然可以以这种方式调用 str (),即使它应该是一种神奇的方法吗? / p>

def setUp(self):
    """Set up the shared test data."""
    self.w = Whuffie.objects.get(pk=1)

def testWhuffieNameIsProjectAndEngineer(self):
    """
    Tests that the name of the individual whuffie line is "Engineer (Project Name)".
    """

    self.assertTrue(self.w != None)
    self.assertEqual(self.w.__str__(), "Engineer (Test Project)")

在Django的其他地方 str()会在您引用对象实例本身时调用,因此我希望能够像这样进行测试:

self.assertEqual(self.w, "Engineer (Test Project)")

2 个答案:

答案 0 :(得分:4)

self.assertEqual(unicode(self.w), u"Engineer (Test Project)")

def __unicode__(self):
    return u"%s (%s)" % (self.engineer, self.project) #unicode will be called automatically

答案 1 :(得分:1)

没有。 __unicode__()必须返回unicode

class Whuffie(models.Model):
      ...

    def __unicode__(self):
        return u"%s (%s)" % (self.engineer + self.project)

如果要访问对象的unicode()方法,请致电__unicode__()