Уведомления

Группа в Telegram: @pythonsu

#1 Май 31, 2009 22:47:30

sv0
От:
Зарегистрирован: 2009-03-04
Сообщения: 15
Репутация: +  0  -
Профиль   Отправить e-mail  

Расширение модели User

Пытаюсь расширить модель User способом ‘monkey patching’.
Нужно добавить дополнительные поля gender, city, country.
В файле models.py добавляю:

User.add_to_class('gender', models.CharField(max_length=1, choices=GENDER_CHOICES))
# и для отображения и возможности редактирования полей в админке:
User._meta.admin.fields += (
('Additional', {'fields': ('gender',)}),
)
User._meta.admin.list_display += ('gender', )
Добавление полей в админке приводит к ошибке:
 File "/home/sv/django/wap/../../models.py", line 155, in <module>
User._meta.admin.fields += (
AttributeError: 'NoneType' object has no attribute 'fields'
команда ‘dir(User._meta.admin)’ в python console так же показывает, что поля fields у admin нет:
>>> from django.db import models
>>> from django.contrib.auth.models import User
>>> dir(User._meta.admin)
['__class__', '__delattr__', '__doc__', '__getattribute__', '__hash__', '__init__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__str__']
>>>
На нескольких блогах(посты за февраль-май 2008) читал, что возможно добавить поля модели User в админку этим способом. Но у меня не получаеться. Подскажите плз, может за год что-то поменялось?

з.ы.
Python 2.5.2
django.VERSION = (1, 1, 0, ‘beta’, 1)



Офлайн

#2 Май 31, 2009 22:50:09

Александр Кошелев
От: Москва
Зарегистрирован: 2007-02-03
Сообщения: 1724
Репутация: +  2  -
Профиль   Отправить e-mail  

Расширение модели User

sv0
На нескольких блогах(посты за февраль-май 2008) читал, что возможно добавить поля модели User в админку этим способом. Но у меня не получаеться. Подскажите плз, может за год что-то поменялось?
Да. Админка теперь настраивается совершенно в другом месте и жестко не связана с моделью. Смотрите документацию.

Манки-патчинг зло!



Офлайн

#3 Май 31, 2009 23:34:02

slav0nic
Команда
От: dp.ua
Зарегистрирован: 2006-05-07
Сообщения: 2260
Репутация: +  41  -
Профиль   Отправить e-mail  

Расширение модели User

лучше сделайте профиль и свяжите его с User через AutoOnetoOneField (находится в гугле:])

Офлайн

#4 Июнь 5, 2009 00:19:22

PyKaB
От:
Зарегистрирован: 2008-11-26
Сообщения: 6
Репутация: +  0  -
Профиль   Отправить e-mail  

Расширение модели User

Озадачился примерно тем же вопросом. Частая ситуация - надо расширить модель User.
Делаю апп и модель, допустим, profile.Profile.
Теперь я очевидно хочу по многим причинам чтобы была возможность редактировать в админке Profile и сразу видеть стандартные поля User.
Создаю в файле admin.py в моем аппе что-то вроде

class UserInline(admin.StackedInline):
model = User

class ProfileAdmin(admin.ModelAdmin):
inlines = [
UserInline,
]

admin.site.register(Profile, ProfileAdmin)
Получаю
Request Method:  	GET
Request URL: http://localhost:8000/admin/profile/profile/add/
Exception Type: Exception
Exception Value:

<class 'django.contrib.auth.models.User'> has no ForeignKey to <class 'profile.models.Profile'>

Exception Location: C:\Program Files\Python25\lib\site-packages\django\forms\models.py in _get_foreign_key, line 806
Зачем моделе User иметь ForeigenKey на Profile не понятно, наоборот ключ есть…



Офлайн

#5 Июнь 8, 2009 17:43:19

PyKaB
От:
Зарегистрирован: 2008-11-26
Сообщения: 6
Репутация: +  0  -
Профиль   Отправить e-mail  

Расширение модели User

Сегодня вернулся к этому вопросу. Создал свою простейющую модель User2, которой заменил User - все заработало…
Но вопрос остался - как сделать добавление\редактирование User в другой моделе?



Отредактировано (Июнь 8, 2009 17:44:02)

Офлайн

#6 Июнь 9, 2009 14:44:16

Ferroman
От:
Зарегистрирован: 2006-11-16
Сообщения: 2759
Репутация: +  1  -
Профиль   Отправить e-mail  

Расширение модели User

А расширить стандартного юзера с использованием AUTH_PROFILE_MODULE почему не подходит?

Офлайн

#7 Июнь 9, 2009 14:46:41

LestatCheb
От:
Зарегистрирован: 2009-06-09
Сообщения: 50
Репутация: +  0  -
Профиль   Отправить e-mail  

Расширение модели User

Ferroman
А расширить стандартного юзера с использованием AUTH_PROFILE_MODULE почему не подходит?
подскажите пожалуйста свой метод,
весь день бьюсь над расширением юзера,
никак не получается….
везде видимо старые варианты,
django.VERSION = (1, 1, 0, ‘beta’, 1) видимо не работают :((

заранее спасибо!



Офлайн

#8 Июнь 9, 2009 15:04:28

Ferroman
От:
Зарегистрирован: 2006-11-16
Сообщения: 2759
Репутация: +  1  -
Профиль   Отправить e-mail  

Расширение модели User

Офлайн

#9 Июнь 9, 2009 15:21:08

LestatCheb
От:
Зарегистрирован: 2009-06-09
Сообщения: 50
Репутация: +  0  -
Профиль   Отправить e-mail  

Расширение модели User

Ferroman
Последний абзац
спасибо,
попробую…

а такое у кого-нибудь заработало?
http://www.codekoala.com/blog/2009/quick-django-tip-user-profiles/



Офлайн

#10 Июнь 9, 2009 18:08:48

Ferroman
От:
Зарегистрирован: 2006-11-16
Сообщения: 2759
Репутация: +  1  -
Профиль   Отправить e-mail  

Расширение модели User

А что, не работает?
Насамом деле профит от такого трюка сомнительный. Если вызовы get_profile() засовывать в в обработчики исключений то проблем не будет.

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version