模型字符串表示中的Django OneToOne字段

时间:2013-04-19 18:50:10

标签: django django-models

我尝试扩展django的身份验证模型,并通过OneToOneField向用户添加一些特殊字段。

from django.db import models
from django.contrib.auth.models import User


class GastroCustomer(models.Model):
    user = models.OneToOneField(User)
    barcode = models.IntegerField()
    balance = models.IntegerField()

    def __unicode__(self):
        return self.user

这在管理模块之外工作正常。但是如果我现在开始通过我收到的管理界面添加一个新的GastroCustomer:  'User' object has no attribute '__getitem__'

如果我将__unicode__(self)更改为简单的内容,例如

def __unicode__(self):
    return "foo"

不会发生此错误。 有没有办法弄清楚这个用户字段何时处于某种无效状态并更改此案例的字符串表示形式?有人可以想象为什么在记录“正确”之前调用__unicode__(self)

1 个答案:

答案 0 :(得分:1)

你的模型实际上是在__unicode__方法中返回一个模型对象而不是它应该返回unicode字符串,你可以这样做:

def __unicode__(self):
    return unicode(self.user)

这将调用User.__unicode__,它将返回user.username。感谢answer上的Nathan Villaescusa

或者,您可以使用__unicode__方法直接返回用户的用户名:

def __unicode__(self):
    return self.user.username