Подтвердить что ты не робот

Переопределить модель пользователя Django __unicode__

В настоящее время модель 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

4b9b3361

Ответ 1

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

Ответ 2

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

Ответ 3

Модель 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, он работает.

Ответ 4

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

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)

Ответ 5

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

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

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