在模型中添加两​​个unicode方法?

时间:2011-07-23 22:01:03

标签: django django-models

除了默认管理器(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)

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

2 个答案:

答案 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)