2011-04-06 5 views
1

J'ai la classe suivante:Quelle est la bonne façon d'accéder __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__()) 

Suis-je utiliser str() correctement dans unicode()?

et dans mon test où je regarde pour voir si l'enregistrement a été créé correctement suis-je encore OK pour appeler str() de cette manière, même si c'est censé être une méthode magique?

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

Ailleurs dans Django str() est appelée chaque fois que vous faites référence à l'instance d'objet lui-même, donc je me attendais à pouvoir tester comme ceci:

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

Répondre

1

n ° __unicode__() doit retourner un unicode.

class Whuffie(models.Model): 
     ... 

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

Appel unicode() si vous souhaitez accéder à la méthode __unicode__() d'un objet.

+0

Bon endroit, je l'ai modifié mon code. J'ai essayé d'appeler str() et unicode() et je reçois des erreurs 'AttributeError: objet « Whuffie » n'a pas d'attribut « str'' –

+1

@Stuart str et unicode sont des fonctions intégrées Python. Vous essayez de les utiliser comme une méthode de modèle Django qu'ils ne sont pas. Références: http://docs.python.org/library/functions.html#str, http://docs.python.org/library/functions.html#unicode –

+0

Je comprends maintenant, merci Ignacio, Thierry –

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

et

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