【发布时间】:2012-08-14 09:56:04
【问题描述】:
我有一个表单,用户可以在其中编辑他们的个人信息/设置,如果他们过去输入过该信息,我正在尝试让它预先填充。我看了这里:
Django prepopulate form with the fields from the database
寻求帮助,但仍无法让表单预填充。提前致谢。
#model
class UserProfile(models.Model):
user = models.OneToOneField(User)
activation_key = models.CharField(max_length=40, blank=True)
first_name = models.CharField(max_length=50, blank=True)
last_name = models.CharField(max_length=50, blank=True)
phone_number = PhoneNumberField(blank=True, null=True)
address_line_1 = models.CharField(max_length=300, blank=True)
address_line_2 = models.CharField(max_length=300, blank=True)
address_line_3 = models.CharField(max_length=300, blank=True)
city = models.CharField(max_length=150, blank=True)
postalcode = models.CharField(max_length=10, blank=True)
paypal_email = models.EmailField(max_length=75, blank=True)
photo = models.ImageField(upload_to="images/", blank=True)
def __unicode__(self):
return self.user.username
def save(self, *args, **kwargs):
try:
existing = UserProfile.objects.get(user=self.user)
self.id = existing.id #force update instead of insert
except UserProfile.DoesNotExist:
pass
models.Model.save(self, *args, **kwargs)
#form
class UserProfileForm(forms.ModelForm):
class Meta:
model = UserProfile
exclude = ('user', 'activation_key',)
# view
def update_settings(request):
if request.method== 'POST':
try:
u = UserProfile.objects.get(user=request.user)
form = UserProfileForm(request.POST, instance=u)
except ObjectDoesNotExist:
form = UserProfileForm(request.POST, request.FILES)
if form.is_valid:
profile = form.save(commit=False)
profile.user = request.user
profile.save()
return HttpResponseRedirect('registration/activation_complete.html')
else:
try:
u = UserProfile.objects.get(user=request.user)
form = UserProfileForm(request.POST, instance=u)
except ObjectDoesNotExist:
form = UserProfileForm(request.POST, request.FILES)
return render_to_response('registration/update_settings.html', locals(), context_instance=RequestContext(request))
【问题讨论】:
-
为什么
request.method != 'POST'时使用request.POST? -
抱歉,当用户提交表单以更新他们的数据时,我不确定我是否关注 Tadeck,这不是“POST”吗?
-
你有
@login_required装饰器吗?另外,is_valid应该是is_valid() -
是的,我有 @login_required 装饰器,感谢您找到丢失的括号
-
@Jonathan:我指的是脚本的一部分,该部分从您拥有的唯一行之后开始,其中包含“
else:”内容。当脚本落入else情况时发生的所有事情都会发生,因为request.method == 'POST'条件没有得到满足(换句话说,在else情况下,request.method != 'POST'是真的)。不知道能不能给你解释清楚一点。