Ответ 1
Если вам нужно переопределить их, скорее всего, вам понадобится больше настроек позже. Самая чистая практика будет использовать модели пользовательских профилей вместо того, чтобы касаться модели пользователя
В настоящее время модель 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
Если вам нужно переопределить их, скорее всего, вам понадобится больше настроек позже. Самая чистая практика будет использовать модели пользовательских профилей вместо того, чтобы касаться модели пользователя
Если вы просто хотите показать полное имя в интерфейсе администратора (это то, что мне нужно), вы можете легко обезвредить его во время выполнения. Просто сделайте что-нибудь подобное в своем 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)
Модель Django Proxy решила эту проблему.
Это мое решение:
form.fields['students'].queryset = Student.objects.filter(id__in = school.students.all())
Здесь school.students - это m2m (Пользователь), Student - прокси-модель пользователя.
class Student(User):
class Meta:
proxy = True
def __unicode__(self):
return 'what ever you want to return'
Все вышеописанное поможет вам решить, хотите ли вы показать свой пользовательский язык 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, он работает.
Создайте класс пользователя прокси.
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)
Я просто нашел этот простой метод на django 1.5
def __unicode__(self):
a = self.last_name
b = self.first_name
c = a+ "-" +b
return c
он вернет вам то, что вы хотите