Уведомления

Группа в Telegram: @pythonsu

#1 Июнь 10, 2009 07:36:20

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

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

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

пока стандартную форму запихал, работает
def users_register(request):
form = UserCreationForm(request.POST)
if form.is_valid():
new_user = form.save()
return HttpResponseRedirect("/")
else:
form = UserCreationForm()
return render_to_response("registration/register.html", {
'form': form,
})
сейчас смотрю
http://docs.djangoproject.com/en/dev/topics/forms/modelforms/
там можно стандартную форму расширить,
т.е. это надо стандартную джанговскую UserCreationForm расширить в свою форму?
в этом направлении надо копать или есть другой способ?

спасибо.



Офлайн

#2 Июнь 10, 2009 12:59:20

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

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

просто полных примеров про регистрацию с расширенной моделью юзера найти что-то не могу,
django-profile?

Офлайн

#3 Июнь 11, 2009 00:29:37

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

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

Ferroman
А расширить стандартного юзера с использованием AUTH_PROFILE_MODULE почему не подходит?
хочется управлять профилем и пользователем в админке в одной моделе.
вопрос решил, но не красиво да и вообще не правильно - пришлось патчить UserAdmin в django.contrib.auth.admin :(



Офлайн

#4 Июнь 11, 2009 07:36:11

poltergeist
От:
Зарегистрирован: 2007-02-28
Сообщения: 522
Репутация: +  0  -
Профиль   Отправить e-mail  

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

Зачем патчить UserAdmin? джанга достаточно расширяема:

# file admin.py in your application
from django.contrib import admin
from django.contrib.auth.admin import UserAdmin

class MyUserAdmin(UserAdmin):
add_form = MyUserCreationForm

admin.site.unregister(User)
admin.site.register(User, MyUserAdmin)



Офлайн

#5 Июнь 16, 2009 08:52:10

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

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

Расширил модель User воспользовавшись советом slav0nic:

slav0nic
лучше сделайте профиль и свяжите его с User через AutoOnetoOneField (находится в гугле:])
и статьей Ивана Сагалаева:
http://softwaremaniacs.org/blog/2007/03/07/auto-one-to-one-field/

#models.py
from wap.fields import AutoOneToOneField

class Profile(models.Model):
user = AutoOneToOneField(User, related_name='profile', verbose_name=_('User'))

gender = models.CharField(max_length=1, choices=GENDER_CHOICES, blank=True)
birth_date = models.DateField(blank=True, null=True)
country = models.ForeignKey(Country, null=True, blank=True)
city = models.ForeignKey(City, null=True, blank=True)
#fields.py
from django.db.models import OneToOneField
from django.db.models.fields.related import SingleRelatedObjectDescriptor
class AutoSingleRelatedObjectDescriptor(SingleRelatedObjectDescriptor): # this line just can't be too long, right?
def __get__(self, instance, instance_type=None):
try:
return super(AutoSingleRelatedObjectDescriptor, self).__get__(instance, instance_type)
except self.related.model.DoesNotExist:
obj = self.related.model(**{self.related.field.name: instance})
obj.save()
return obj

class AutoOneToOneField(OneToOneField):
'''
OneToOneField, которое создает зависимый объект при первом обращении
из родительского, если он еще не создан.
'''
def contribute_to_related_class(self, cls, related):
setattr(cls, related.get_accessor_name(), AutoSingleRelatedObjectDescriptor(related))
#if not cls._meta.one_to_one_field:
# cls._meta.one_to_one_field = self



Офлайн

#6 Июнь 17, 2009 11:54:03

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

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

я так сделал

models.py:
from django.db import models
from django.contrib.auth.models import User, UserManager
from django.db.models import signals

class UserProfile(User):
gender = models.CharField(max_length=1, choices=GENDER_CHOICES, help_text=u'Выберите пол', verbose_name='Пол')
education = models.ForeignKey(Education, verbose_name='Образование',null=True, blank=True)
kinship = models.ForeignKey(UserKinship, verbose_name='Родственное положение',null=True, blank=True)
rating = models.IntegerField(default=0, null=True, blank=True)
age = models.DateField('Дата Рождения',null=True, blank=True)
objects = UserManager()

def create_profile_for_user(sender, **kwargs):
if kwargs['created']:
p = UserProfile() # 'UserProfile' is my custom User model
p.__dict__.update(kwargs['instance'].__dict__)
p.save()

signals.post_save.connect(create_profile_for_user, sender=User)
settings.py:

AUTH_PROFILE_MODULE = "base.UserProfile"
admin.py:


from django.contrib.auth.models import User

from django.db import models
from django.contrib import admin
from django.contrib.auth.models import User
from django.contrib.auth.admin import UserAdmin
from base.models import UserProfile, UserContacts

class ProfileInline(admin.StackedInline):
model = UserProfile
extra = 2
max_num = 2


class ProfileAdmin(admin.ModelAdmin):

inlines = (ProfileInline,UserContactsInline,)


admin.site.unregister(User)
admin.site.register(User, ProfileAdmin)
правда в админке наверху обычный User выводится, а потом уже расширенный, но это не сильно напрягает.



Офлайн

#7 Ноя. 11, 2009 20:53:14

qman
От:
Зарегистрирован: 2007-07-02
Сообщения: 444
Репутация: +  0  -
Профиль   Отправить e-mail  

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

poltergeist
Зачем патчить UserAdmin? джанга достаточно расширяема:
Код:
# file admin.py in your application
from django.contrib import admin
from django.contrib.auth.admin import UserAdmin

class MyUserAdmin(UserAdmin):
add_form = MyUserCreationForm

admin.site.unregister(User)
admin.site.register(User, MyUserAdmin)
спасибо!



Офлайн

#8 Ноя. 22, 2009 06:06:54

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

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

LestatCheb
я так сделал
Извините, а как вы боролись с полем вставки пароля? А то у меня форма смены пароля на 404 выкидывает, а отдельно для этого дела в urls.py лезть как то не очень…



Офлайн

#9 Фев. 8, 2013 14:43:36

devalentino
Зарегистрирован: 2013-02-08
Сообщения: 6
Репутация: +  0  -
Профиль   Отправить e-mail  

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

Тут не про расширемие модели User но про расширение моделей в целом

Офлайн

#10 Фев. 11, 2013 05:33:42

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

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

devalentino,
Модератор: Прекратите спамить, пока по-хорошему прошу.



Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version