首页 > 解决方案 > 如何创建用户配置文件更新视图/表单?

问题描述

我试图更新用户个人资料,但我不知道我在这里犯了什么错误。

#forms.py
class AddStudentUserForm(forms.ModelForm):
    class Meta:
        model = User
        fields = ["username", "first_name", "last_name"]

class AddStudentStaffForm(forms.ModelForm):
    class Meta:
        model = Staff
        fields = ["gender", "dob", "mob", "img"]

#views.py
def editProfile(request, user, id):
    if request.POST:
        staffform = AddStudentStaffForm(request.POST or None, request.FILES or None, instance=request.user.staff_profile)
        userform = AddStudentUserForm(data=request.POST, instance=request.user)

        if staffform.is_valid():
            staffform.save()

        if userform.is_valid():
            userform.save()
            return redirect(profile,user)
    return render(request, 'edit.html')

#models.py
class Staff(models.Model):
    Male = 'Male'
    Female = 'Female'
    Other = 'Other'
    GENDER_CHOICE = (
        (Male, 'Male'),
        (Female, 'Female'),
        (Other, 'Other')
    )
    id = models.AutoField(primary_key=True)
    admin = models.OneToOneField(User, related_name='staff_profile', on_delete=models.CASCADE)
    gender = models.CharField(max_length=10, choices=GENDER_CHOICE, default=Male)
    dob = models.DateField(auto_now_add=False, blank=True, null=True, default=None)
    mob = models.IntegerField(blank=True, null=True, default=None)
    img = models.ImageField(upload_to='staff/', blank="True", null="True")
    objects = models.Manager()

    @receiver(post_save, sender=User)
    def create_user_profile(sender, instance, created, **kwargs):
        if created:
            Staff.objects.create(user=instance)

    @receiver(post_save, sender=User)
    def save_user_profile(sender, instance, **kwargs):
        instance.staff_profile.save()

    def __str__(self):
        return self.gender

我开始创建一个学生管理系统项目。但是我在开发它时遇到了一些困难。我尝试了很多来解决这些问题,但因为我无法解决。

在这里,如果我想更新诸如性别、出生日期、暴民之类的员工模型字段,它将成功更新,但是当我尝试更新用户名、名字、姓氏等用户模型字段时,它不会更新。我认为if userform.is_valid():条件无法运行,但我不知道我在这里犯了什么错误。

标签: pythondjangodjango-modelsdjango-viewsdjango-forms

解决方案


您可以调试表单无效的原因,请尝试以下代码:

if userform.is_valid():
    userform.save()
    return redirect(profile,user)
else:
    print userform.errors #To see the form errors in the console. 

推荐阅读