2011-04-06 78 views
1

我有以下类:访问__unicode __()的正确方法是什么?

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__()) 

我使用STR()正确的Unicode()?

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

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)")

回答

1

__unicode__()必须返回一个unicode

class Whuffie(models.Model): 
     ... 

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

呼叫,如果你想访问对象的__unicode__()方法unicode()

+0

好点,我已经修改了我的代码。 我试过调用str()&unicode(),我得到错误'AttributeError:'Whuffie'对象没有属性'str'' – 2011-04-06 13:02:16

+1

@Stuart str和unicode是内置的Python函数。您试图将它们用作Django Model方法,但它们不是。参考资料:http://docs.python.org/library/functions.html#str,http://docs.python.org/library/functions.html#unicode – 2011-04-06 17:31:48

+0

我现在明白了,谢谢Ignacio,Thierry – 2011-04-06 18:46:01

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 
相关问题