除了默认管理器(objects=model.Manager()
)之外,我还在使用自定义模型管理器。我想在模型中添加两个__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 :(得分:1)
你的问题没有说明你有什么样的错误,因此不完整。
不幸的是, unicode 是一个Python构造。你可以只有一个。
相反,如果将对象格式化为字符串以使用自定义方法,则需要修复该位置。
E.g。
text = obj.my_formatter()
而不是
text = u"Something " + obj
如果问题是 unicode ()方法中出现异常,则需要以不会发生异常的方式编写方法。例如。不要使用未初始化的变量。
答案 1 :(得分:0)
我在try/except
方法中添加了__unicode__
来简化它:
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)