Переопределить модель пользователя Django __unicode__ - PullRequest
16 голосов
/ 21 февраля 2011

В настоящее время Django 1.2.3 Модель пользователя Юникод равен

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

Ответы [ 5 ]

36 голосов
/ 28 апреля 2012

Если вы просто хотите показать полное имя в интерфейсе администратора (это то, что мне было нужно), вы можете легко его пропатчить во время выполнения. Просто сделайте что-то подобное в вашем 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)
5 голосов
/ 12 сентября 2013

Модель прокси Django решила эту проблему.

Это мое решение:

form.fields['students'].queryset = Student.objects.filter(id__in = school.students.all())

Здесь school.students - м2м (пользователь), 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, это работает.

0 голосов
/ 24 сентября 2014

Я только что нашел этот простой метод на django 1.5

def __unicode__(self):
   a = self.last_name
   b = self.first_name 
   c = a+ "-" +b
   return c 

вернет то, что вы хотите

0 голосов
/ 04 июня 2011

Создание прокси класса пользователя.

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)
0 голосов
/ 21 февраля 2011

Если вам нужно переопределить их, скорее всего, вам понадобятся дополнительные настройки позже.Самым чистым методом было бы использовать модели профиля пользователя вместо того, чтобы касаться модели пользователя

...