【问题标题】:how to update a extended Django User model?如何更新扩展的 Django 用户模型?
【发布时间】:2020-11-16 01:18:34
【问题描述】:

我创建了用户认证系统,其中包括默认用户模型和扩展用户模型。它们如下:

from django.db import models
from django.urls import reverse
from django.contrib.auth.models import User


class UserProfile(models.Model):
    user = models.OneToOneField(User, on_delete=models.CASCADE, null=True)
    Photo = models.ImageField(upload_to='documents/%Y/%m/%d/', null=True)
    uploaded_at = models.DateTimeField(auto_now_add=True, null=True)
    dob = models.DateField(max_length=20, null=True)
    country = models.CharField(max_length=100, null=True)
    State = models.CharField(max_length=100, null=True)
    District = models.CharField(max_length=100, null=True)
    phone = models.CharField(max_length=10, null=True)

    def get_absolute_url(self):
        return reverse('profile', kwargs={'id': self.id})


forms.py

class UserProfileForm(forms.ModelForm):
    Photo = forms.ImageField( max_length=100) 
    dob = forms.DateField(widget=forms.TextInput(attrs={'type': 'date'}))
    country = forms.CharField(max_length=100)
    State = forms.CharField(max_length=100)
    District = forms.CharField(max_length=100)
    phone = forms.CharField(max_length=10)

    class Meta:
        model = UserProfile
        fields = ('Photo', 'dob', 'country', 'State', 'District', 'phone')

借助上述模型和表单,我能够创建用户,并为这些自定义模型字段输入值并查看用户配置文件。到目前为止一切顺利。

但是,我在更新这些自定义字段时遇到了问题。我使用了 Django 的内置模块来更新默认的用户字段(电子邮件)。但我无法找到更新这些自定义字段('dob'、'country'、'State'、'District'、'phone')的方法。下面是views的方法。

views.py

@login_required(login_url="/login/")
def editUserProfile(request):
    if request.method == "POST":
        form = UserProfileUpdateForm(request.POST, instance=request.user)  # default User profile update
        obj = UserProfile.objects.get(id=request.user.id)
        form1 = UserProfileForm(request.POST or None, instance=obj)  # custom fields update.

        if form.is_valid() and form1.is_valid():
            obj.Photo = form1.cleaned_data['Photo']
            obj.dob = form1.cleaned_data['dob']
            obj.country = form1.cleaned_data['country']
            obj.State = form1.cleaned_data['State']
            obj.District = form1.cleaned_data['District']
            obj.phone = form1.cleaned_data['phone']
            form.save()
            form1.save()
            messages.success(request, f'updated successfully')
            return redirect('/profile1')
        else:
            messages.error(request, f'Please correct the error below.')
    else:
        form = UserProfileUpdateForm(instance=request.user)
        form1 = UserProfileUpdateForm(instance=request.user)
    return render(request, "authenticate\\editProfilePage.html", {'form': form, 'form1': form1})

我的个人资料页面上有一个更新按钮,点击后我只能看到“电子邮件”字段,其中包含要更新的预填充数据(我可以成功更新此默认字段)。

我看过其他 stackoverflow 帖子,但没有帮助。

我无法找出错误。

请帮忙

谢谢,

【问题讨论】:

    标签: django django-models django-forms django-views


    【解决方案1】:

    我认为问题出在这一行

    obj = UserProfile.objects.get(id=request.user.id)
    

    这里左边的 id 是来自 UserProfile 模型的 id。所以会是这样的

    obj = UserProfile.objects.get(user__id=request.user.id)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-10-12
      • 2011-02-28
      • 2013-12-06
      • 2018-01-21
      • 2013-12-23
      相关资源
      最近更新 更多