2011-07-23 2 views
0

J'utilise un gestionnaire de modèle personnalisé en plus du gestionnaire par défaut (objects=model.Manager()). Je voudrais ajouter deux méthodes __unicode__ au modèle - une pour le gestionnaire par défaut et une pour le gestionnaire personnalisé; Dans le cas contraire, l'Unicode génère une erreur pour le résultat du gestionnaire personnalisé, qui ne contient pas certaines variables utilisées dans l'Unicode pour le gestionnaire par défaut.Ajouter deux méthodes Unicode à un modèle?

Par exemple -

class CreditCountManager(models.Manager): 
    def credit_count(self): 
     ... 
     return result_list 

class UserProfile(models.Model): 
    user = models.ForeignKey(User, unique=True) 
    full_name = models.CharField(max_length=100) 
    network = models.ForeignKey(Network) 
    ... 
    credit_count = CreditCountManager() 
    objects = models.Manager() 

# need something like: 
def __unicode-for-default__(self): 
    return "%s(%s)"%(self.user, self.network) 

def __unicode-for-credit_count__(self): 
    return "%s(%s)"%(other variables) 

Est-il possible de le faire? Je vous remercie.

+0

« ... l'unicode renvoie une erreur pour le résultat du gestionnaire personnalisé. » ... Qu'est-ce que cela veut dire? –

Répondre

1

Votre question ne précise pas quel type d'erreur vous avez et est donc incomplète.

Malheureusement unicode est une construction Python. Vous pouvez en avoir un seul.

Au lieu de cela, vous devez corriger l'endroit où l'objet est formaté en une chaîne pour utiliser une méthode personnalisée.

E.g.

text = obj.my_formatter() 

au lieu de

text = u"Something " + obj 

Si le problème est une exception à l'intérieur augmenté unicode() méthode, vous devez écrire la méthode de telle sorte que l'exception ne se produit pas. Par exemple. n'utilisez pas de variables non initialisées.

0

J'ai ajouté un try/except dans la méthode __unicode__ pour simplifier:

def __unicode__(self): 
    try: 
     self.user 
     return "%s(%s)"%(self.user, self.network) 
    except (User.DoesNotExist, Network.DoesNotExist): 
     return "%s(%s)"%(self.full_name, self.credit_count) 
Questions connexes