模型字符串表示中的 Django 一对一字段



我尝试扩展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)在记录"正确"之前被调用吗?

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

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

调用User.__unicode__,返回user.username。感谢Nathan Villaescusa的回答。

也可以直接返回__unicode__方法中user的用户名:

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

最新更新