2011-04-06 84 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 
相關問題