有我的模型:如何在django中正確創建ModelForm?
class Profile(models.Model):
user = models.OneToOneField(User, related_name='profile')
street_address = models.CharField(max_length=511, blank=True)
photo = models.ImageField(upload_to='images/userpics/', blank=True)
phone_number = models.CharField(max_length=50, blank=True)
about_me = models.TextField(blank=True)
status = models.CharField(max_length=140, blank=True)
形式:
class ProfileForm(forms.ModelForm):
class Meta:
model = Profile
exclude = ('user_id',)
查看:
@login_required
def update_profile(request):
# if this is a POST request we need to process the form data
if request.method == 'POST':
# create a form instance and populate it with data from the request:
form = ProfileForm(request.POST)
form.data['user_id'] = str(request.user.id)
# check whether it's valid:
if form.is_valid():
profile = form.save(commit=False)
# commit=False tells Django that "Don't send this to database yet.
# I have more things I want to do with it."
profile.user = request.user # Set the user object here
profile.save() # Now you can send it to DB
else:
return render(request, "dashboard/account.html", {"form_profile": form, "form_password": ChangePasswordForm(), 'balance': get_user_balance(request.user)})
我要的是簡單UpdateProfileForm這裏用戶將能夠更新他們的信息。什麼是實施這個最好的方法?
您可以使用@Sayse建議的更新視圖,但基於常規功能的視圖也應該可以。你已經顯示了你的代碼,但你沒有說過什麼是不工作的。 'request.method =='GET''會發生什麼?你的表單應該排除'user'字段而不是'user_id'。您不需要'form.data ['user_id'] = str(request.user.id)',因爲您從表單中排除了用戶字段。 – Alasdair