簡體   English   中英

當前用戶的Django用戶配置文件模型表單編輯

[英]Django User profile model form edit for current user

我已經對此進行了大量搜索,並且提供的所有問題和答案都從來沒有明確且適合目的,也許我走錯了路。 我最近才開始使用 Python 和 Django,所以對它知之甚少。 我正在創建一個網站,並使用 Django 完成了基本身份驗證,甚至使用社交 django 添加了 facebook 身份驗證。 那部分一切正常。 現在我將轉向個人資料信息以及在您注冊網站后如何更新它。

我在models.py中有以下UserProfile:

class UserProfile(models.Model):
    user = models.OneToOneField(User, on_delete=models.CASCADE)
    first_name = models.TextField()
    last_name = models.TextField()
    email_address = models.EmailField()
    phone_number = models.TextField()

在 forms.py 一個測試表單:

class UserProfileForm(forms.ModelForm):
    class Meta:
        model = UserProfile
        fields = ['first_name','last_name','email_address']

然后在 views.py 我有一個功能:

def myprofile(request):
    if request.method == 'POST':
        form = UserProfileForm(request.POST, instance=request.user)
        if form.is_valid():
            form.save()
            user_profile = UserProfile.objects.get(user=request.user)
    if request.method == 'GET':
        user_profile = UserProfile.objects.get(user=request.user)
        form = UserProfileForm(instance=user_profile)

    return render(request, 'pandp/myprofile.html',
                 {'user_profile' : user_profile, 'form' : form})

最后是 myprofile.html:

<div class="profile-details">
   <form method="post">{% csrf_token %}
     {{ form.as_p }}
     <input type="submit" value="Update">
   </form>
</div>

我從一開始就在努力實際上只加載登錄用戶的 UserProfile,似乎我設法使用UserProfile.objects.get(user=request.user)UserProfileForm(request.POST, instance=request.user )但不確定這是否是正確的方法。 目前,我的代碼在 html 表單輸出中填充 first_name、last_name 和電子郵件地址,但是當更新字段並單擊“更新”按鈕時,它會刷新但不會保存到數據庫。

form.save() 不夠用還是我做錯了什么?

如果您有關於更簡單的方法的建議,我會全力以赴。 我也試過研究 UpdateView 方法,但我發現的所有例子總是有差距,我無法滿足我的目的。 在 ModelForm 上使用 UpdateView 有什么好處?

可能是冗長而冗長的問題,但希望您能解決問題,並希望這可以幫助其他有類似問題的人。

def myprofile(request):
    if request.method == 'POST':
        user_profile = UserProfile.objects.get(user=request.user)
        form = UserProfileForm(request.POST, instance=user_profile)
        ...

您需要獲取 UserProfile 實例並將其傳遞給 UserProfileForm,就像評論中提到的 @willem-van-onsem 一樣。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM