我想創建一個「更新用戶的個人資料」頁面,讓用戶修改自己的個人資料,所以我想出了以下型號:Django表單問題與用戶配置
class Profile(models.Model):
user = models.OneToOneField(User)
nick_name = models.CharField(blank=True,max_length=100)
school = models.CharField(blank=True,max_length=100)
motto = models.CharField(blank=True,max_length=100)
class ProfileForm(ModelForm):
class Meta:
model = Profile
而我的觀點被設計成:
@login_required
def update_profile_view(request):
if request.method == 'POST':
user = request.user
try:
profile = user.get_profile()
except Exception:
profile = Profile.objects.create(user=user)
form = ProfileForm(request.POST)
if form.is_valid():
cd = form.cleaned_data
profile.nick_name = cd['nick_name']
profile.school = cd['school']
profile.motto = cd['motto']
profile.save()
return HttpResponseRedirect('/main_page/')
else:
form = ProfileForm()
return render(request, 'update_profile.html', {'form':form})
用戶和配置文件之間的關係顯然是1to1,並與請求我可以確定當前的用戶。所以表單的用戶字段不需要填寫。不幸的是,這無法通過「form.is_valid()」測試。在調用「is_valid」之前,似乎很難修改表單。爲了簡單起見,我不想創建自己的Form類,也不想編寫自定義的表單驗證。有沒有其他解決問題的方法?
什麼是實際的錯誤信息/追蹤?您可以嘗試使用ProfileForm(request.POST,instance = profile)實例化表單... – Jingo 2012-08-17 13:36:29
非常類似的問題與有用的答案在這裏:[Django,用ModelForm更新用戶配置文件](http://stackoverflow.com/問題/ 1823588/django的更新管理一個用戶簡檔上帶有一個-的ModelForm)。 – dgel 2012-08-17 13:39:03