目前,Django 1.2.3用户模型 unicode 是
def __unicode__(self):
return self.username
我想覆盖它所以:
def __unicode__(self):
return u'%s, %s' % (self.last_name, self.first_name)
如何?
达到类似的效果:
User._meta.ordering = ['last_name', 'first_name']
在定义anywhere
答案 0 :(得分:36)
如果您只是想在管理界面中显示全名(这就是我需要的),您可以在运行时轻松地对其进行修补。只需在admin.py中执行类似的操作:
from django.contrib import admin
from django.contrib.auth.models import User
def user_unicode(self):
return u'%s, %s' % (self.last_name, self.first_name)
User.__unicode__ = user_unicode
admin.site.unregister(User)
admin.site.register(User)
答案 1 :(得分:5)
Django的代理模型解决了这个问题。
这是我的解决方案:
form.fields['students'].queryset = Student.objects.filter(id__in = school.students.all())
这里school.students是m2m(用户),Student是User的代理模型。
class Student(User):
class Meta:
proxy = True
def __unicode__(self):
return 'what ever you want to return'
以上所有内容可帮助您解决是否要在自定义方法中显示User ForeignKey的问题。如果您只想在管理视图中更改它,则有一个简单的解决方案:
def my_unicode(self):
return 'what ever you want to return'
User.__unicode__ = my_unicode
admin.site.unregister(User)
admin.site.register(User)
将这些代码添加到admin.py,它可以正常工作。
答案 2 :(得分:0)
如果您需要覆盖这些,可能以后需要进行更多自定义。 最干净的做法是使用user profile models而不是触摸用户模型
答案 3 :(得分:0)
创建代理用户类。
class UserProxy(User):
class Meta:
proxy = True
ordering = ['last_name', 'first_name']
def __unicode__(self):
return u'%s, %s' % (self.last_name, self.first_name)
答案 4 :(得分:0)
我刚刚在django 1.5上找到了这个简单的方法
def __unicode__(self):
a = self.last_name
b = self.first_name
c = a+ "-" +b
return c
它会返回你想要的东西