Форум сайта python.su
Пытаюсь расширить модель 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'
>>> 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__']
>>>
Офлайн
sv0Да. Админка теперь настраивается совершенно в другом месте и жестко не связана с моделью. Смотрите документацию.
На нескольких блогах(посты за февраль-май 2008) читал, что возможно добавить поля модели User в админку этим способом. Но у меня не получаеться. Подскажите плз, может за год что-то поменялось?
Офлайн
лучше сделайте профиль и свяжите его с User через AutoOnetoOneField (находится в гугле:])
Офлайн
Озадачился примерно тем же вопросом. Частая ситуация - надо расширить модель 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
Офлайн
Сегодня вернулся к этому вопросу. Создал свою простейющую модель User2, которой заменил User - все заработало…
Но вопрос остался - как сделать добавление\редактирование User в другой моделе?
Отредактировано (Июнь 8, 2009 17:44:02)
Офлайн
А расширить стандартного юзера с использованием AUTH_PROFILE_MODULE почему не подходит?
Офлайн
Ferromanподскажите пожалуйста свой метод,
А расширить стандартного юзера с использованием AUTH_PROFILE_MODULE почему не подходит?
Офлайн
Офлайн
Ferromanспасибо,
Последний абзац
Офлайн
А что, не работает?
Насамом деле профит от такого трюка сомнительный. Если вызовы get_profile() засовывать в в обработчики исключений то проблем не будет.
Офлайн