Django在成功注册后编辑用户配置文件

时间:2018-03-10 08:39:44

标签: django

我尝试以这样一种方式配置项目,即用户进行主要注册,然后登录并从个人文件柜中添加有关他自己的其他信息。初始注册没有问题,但是当您尝试更改和补充信息时,没有任何更改。

我的UserProfile模型: 的 models.py

from customuser.models import User

class Profile(models.Model):

    user = models.OneToOneField(User, on_delete=models.CASCADE)
    name = models.CharField(max_length=50, blank=True)
    surname = models.CharField(max_length=50, blank=True, default = None)
    avatar = models.ImageField(upload_to = 'images/profile/%Y/%m/%d/', blank=True, null=True)
    position = models.ForeignKey('Position',blank=True, default=None)
    role = models.ForeignKey('Role', blank=True, default=None)
    company = models.ForeignKey('Company',blank=True, default=None)
    status = models.ForeignKey('Status',  blank=True, default=None) 


@receiver(post_save, sender=User)
def create_or_update_user_profile(sender, instance, created, **kwargs):
    if created:
        Profile.objects.create(user=instance)
    instance.profile.save()

forms.py

from django import forms
from django.forms import ModelForm
from client.models import Profile

class UserProfileForm(ModelForm):
    class Meta:
        model = Profile
        exclude = ['user']

views.py

from customuser.models import User
from client.models import Profile
from .forms import UserProfileForm

def edit_user(request, pk):
    user = User.objects.get(pk=pk)
    form = UserProfileForm(instance=user)

    if request.user.is_authenticated() and request.user.id == user.id:
        if request.method == "POST":
            form = UserProfileForm(request.POST, request.FILES, instance=user)

            if form.is_valid():
                update = form.save(commit=False)               
                update.user = user
                update.save()
            return HttpResponse('Confirm')                
    else:
        form = UserProfileForm(instance=user)

    return render(request, 'client/edit.html', {'form': form})

1 个答案:

答案 0 :(得分:1)

UserProfileFormProfile模型的表单,因此传递给表单的实例应该是配置文件,而不是用户。你应该做这样的事情:

def edit_user(request, pk):
    user = User.objects.get(pk=pk)
    profile = user.profile
    form = UserProfileForm(instance=profile)

    if request.user.is_authenticated() and request.user.id == user.id:
        if request.method == "POST":
            form = UserProfileForm(request.POST, request.FILES, instance=profile)