[英]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.