目前,Django 1.2.3用户模型unicode是
def __unicode__(self):
return self.username
Run Code Online (Sandbox Code Playgroud)
我想覆盖它,所以它:
def __unicode__(self):
return u'%s, %s' % (self.last_name, self.first_name)
Run Code Online (Sandbox Code Playgroud)
如何?
为了类似的效果:
User._meta.ordering = ['last_name', 'first_name']
Run Code Online (Sandbox Code Playgroud)
定义时工作 anywhere
小智 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)
Run Code Online (Sandbox Code Playgroud)
小智 5
Django的代理模型解决了这个问题.
这是我的解决方案:
form.fields['students'].queryset = Student.objects.filter(id__in = school.students.all())
Run Code Online (Sandbox Code Playgroud)
这里school.students是m2m(用户),Student是User的代理模型.
class Student(User):
class Meta:
proxy = True
def __unicode__(self):
return 'what ever you want to return'
Run Code Online (Sandbox Code Playgroud)
如果您想在自定义方法中显示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)
Run Code Online (Sandbox Code Playgroud)
将这些代码添加到admin.py,它的工作原理.