Форум сайта python.su
Приветствую коллеги,
Работаю с django не более двух недель, а уже приходится учавствовать в проектах. Так вот, решил поделиться проблеммой, так как у самого что-то пока не выходит.
Глобально задача звучит просто - дать пользователю возможность редактирвоать свой профиль.
При регистрации пользователь водит лишь логин, почту и пароль, но позже при переходе в профиль у него есть возможность внести в профиль дополнительную информацию.
#models.py class Profile(models.Model): user = models.OneToOneField(User) ava = models.ImageField(upload_to='user_image',) city = models.CharField(max_length=32, blank=True, null=True) about = models.TextField(blank=True, null=True) rating = models.IntegerField(default=0) class Meta: verbose_name = 'Профиль'
#forms.py class UserForm(forms.ModelForm): class Meta: model = User fields = ['first_name', 'last_name', 'username', 'email', 'password'] class ProfileForm(UserForm): class Meta(object): model = Profile fields = ('ava', 'city', 'about') widgets = { 'about': forms.Textarea(attrs={'cols': 80, 'rows': 20}), }
#view.py def EditProfile(request): if not request.user.is_authenticated(): return HttpResponseRedirect('/') if request.method == 'POST': user = request.user usrform = UserForm(request.POST, instance=User.objects.get(username=request.user)) proform = ProfileForm(request.POST, instance=user) if usrform.is_valid() and proform.is_valid(): usrform.save() proform.save() else: usrform = UserForm() proform = ProfileForm() profile = request.user.get_profile context = { 'profile' : profile, 'usrform' : usrform, 'proform' : proform } return render_to_response('profile/profile_edit.html', context, context_instance=RequestContext(request))
Офлайн
Примеры можно смотреть в самой djangoproject.com на github
github.com/django/djangoproject.com
Офлайн
Спасибо, я очень здорово продвинулся и всё переделал согласно примерам из djangoproject, но пока не выходит..
На текущий момент уменя появляется ошибка:
Exception Value: Reverse for 'user_profile' with arguments '(u'admin',)' and keyword arguments '{}' not found.
Офлайн
Коллеги, таки разобрался
Если вдруг кому-то интересна моя рабочая конфигурация, прошу:
#models.py class Profile(models.Model): user = models.OneToOneField(User) ava = models.ImageField(upload_to='user_image',) city = models.CharField(max_length=32, blank=True, null=True) about = models.TextField(blank=True, null=True) rating = models.IntegerField(default=0) class Meta: verbose_name = 'Профиль'
# forms.py class UserForm(forms.ModelForm): class Meta: model = User fields = ['first_name', 'last_name'] class ProfileForm(forms.ModelForm): class Meta(): model = Profile fields = ['ava', 'city', 'about', 'rating']
# views.py @login_required def EditProfile(request): user = request.user if request.method == "POST": usrform = UserForm(data=request.POST, instance=user) proform = ProfileForm(data=request.POST, instance=user.get_profile()) if usrform.is_valid() and proform.is_valid(): user = usrform.save() profile = proform.save(commit=False) profile.user = user profile.save() return HttpResponseRedirect('/profile/view') else: return render_to_response('profile/profile_edit.html', { 'profile': request.user.get_profile, 'usrform': usrform, 'proform': proform}, context_instance=RequestContext(request)) else: usrform = UserForm(instance=user) proform = ProfileForm(instance=user.get_profile() ) profile = request.user.get_profile return render(request, "profile/profile_edit.html", { 'profile': profile, 'usrform': usrform, 'proform': proform, })
Офлайн