2011-07-23 35 views
0

除了默认管理器(objects=model.Manager())之外,我还使用了自定义模型管理器。我想为模型添加两个__unicode__方法 - 一个用于默认管理器,另一个用于自定义管理器;否则,unicode会为自定义管理器的结果引发错误,该错误不包含unicode中用于默认管理器的一些变量。将两个unicode方法添加到模型中?

例如 -

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) 

有没有办法做到这一点?谢谢。

+0

“... unicode的抛出一个错误自定义管理的结果。” ......这是什么意思? –

回答

1

你的问题没有说明你有什么样的错误,因此是不完整的。

不幸的是unicode是一个Python构造。你可以只有一个。

相反,您需要修复对象被格式化为字符串以使用自定义方法的地方。

E.g.

text = obj.my_formatter() 

代替

text = u"Something " + obj 

如果问题是你内心需要编写方法以这样的方式使异常不发生的Unicode()方法上升一个例外。例如。不要使用未初始化的变量。

0

我在__unicode__方法添加一个try/except简化它:

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)