Форум сайта python.su
Ferromanнаверное работает,
А что, не работает?
Насамом деле профит от такого трюка сомнительный. Если вызовы 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,
})
Офлайн
просто полных примеров про регистрацию с расширенной моделью юзера найти что-то не могу,django-profile?
Офлайн
Ferromanхочется управлять профилем и пользователем в админке в одной моделе.
А расширить стандартного юзера с использованием AUTH_PROFILE_MODULE почему не подходит?
Офлайн
Зачем патчить 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)
Офлайн
Расширил модель User воспользовавшись советом slav0nic:
slav0nicи статьей Ивана Сагалаева:
лучше сделайте профиль и свяжите его с User через AutoOnetoOneField (находится в гугле:])
#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
Офлайн
я так сделал
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)
Офлайн
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)
Офлайн
LestatChebИзвините, а как вы боролись с полем вставки пароля? А то у меня форма смены пароля на 404 выкидывает, а отдельно для этого дела в urls.py лезть как то не очень…
я так сделал
Офлайн
Тут не про расширемие модели User но про расширение моделей в целом
Офлайн
devalentino,
Модератор: Прекратите спамить, пока по-хорошему прошу.
Офлайн