【问题标题】:Prepopulating Form Data Django预填充表单数据 Django
【发布时间】: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' 是真的)。不知道能不能给你解释清楚一点。

标签: python django


【解决方案1】:

你可以像这样更新你的视图代码:

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():  #is_valid is function not property
            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(instance=u) #No request.POST
        except ObjectDoesNotExist:
            form = UserProfileForm(request.FILES)
   # move it outside of else
   return render_to_response('registration/update_settings.html', locals(),
                 context_instance=RequestContext(request))

【讨论】:

    猜你喜欢
    • 2012-07-20
    • 1970-01-01
    • 2018-09-02
    • 2018-01-06
    • 2018-08-15
    • 1970-01-01
    • 2022-01-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多