【问题标题】:Unable to Save form Django无法保存表单 Django
【发布时间】:2014-04-12 14:52:47
【问题描述】:

我正在尝试保存表单以更新现有用户,但我无法使其正常工作。当我尝试保存表单时发生错误。控制台显示视图中发生错误(内部服务器错误)。

表格:

class updateFirstName(forms.ModelForm):

  class Meta:
    model = User
    fields = ('first_name',)
    def __init__(self, *args, **kwargs):
        super(updateInfoForm, self).__init__(*args, **kwargs)
        self.helper = FormHelper()
        self.helper.form_id = 'id-updateFirst'
        self.helper.form_class = 'blueForms'
        self.helper.form_method = 'post'
        self.helper.form_action = '/login/userInfoChange/'
        self.helper.add_input(Submit('submit', 'Submit'))

查看:

@json_view
@csrf_exempt
def userInfoChange(request):
    context = RequestContext(request)
    if request.method == 'POST':

        user = User.objects.get(username=request.user.username)
        user_form = updateFirstName(request.POST)
        print user_form
        if user_form.is_valid():
                user_form.save()

                print "Valid Form"
                return {'success': True}

html:

<form id="updateUsername">
              <div class="input-group">
                  <span class="input-group-btn">
                  <button class="btn btn-success" type="button" id="submit-username">Change</button>
                  </span>
                   <input type="text" class="form-control" id="id_firstname" placeholder="First Name: {{user.first_name}}">
                   <script type="text/javascript">
                          $('#submit-username').click(function(){

                                  $.ajax({//begin
                                          type: 'POST', 
                                          url:  '/login/userInfoChange/', 
                                          data: $('#updateUsername').serialize(),    
                                          success: function(result){
                                                  console.log('updateUsername');
                                          }
                                        });

                          });

                   </script>
              </div><br></form>

型号:

class UserProfile(models.Model):
       user = models.OneToOneField(User)
       confirmation_code = models.CharField(max_length=128)
       reset_code = models.CharField(max_length=128)
       address_lineOne = models.CharField(max_length=128)
       address_lineTwo = models.CharField(max_length=128)
       city = models.CharField(max_length=128)
       State = models.CharField(max_length=128)
       zipCode = models.CharField(max_length=10)
       def __unicode__(self): 
    return self.user.username

解决方案:

first_name = request.POST.get('first_name')
user.first_name = first_name
user.save()

感谢 ejey 解决了我的 csrf ajax 问题。

【问题讨论】:

  • 这就是你的全部观点吗?如果您设置 DEBUG=True,错误消息会说什么?
  • 是的,目前无论如何。我只是想弄清楚如何将表单保存到数据库中。

标签: ajax django


【解决方案1】:

如果您打算使用 ajax 发布,您应该使用查看方法,例如:

def some_ajax_view(request):
    data = request.POST.copy()
        if request.is_ajax() and request.POST:
             ...
             ...

您可以获得有关如何处理您的 ajax 请求的更多信息,而不必在 csrf https://docs.djangoproject.com/en/dev/ref/contrib/csrf/#ajax 上妥协

【讨论】:

  • 谢谢。我一直想调查这个。
【解决方案2】:

首先,您没有回答我关于错误消息的问题。这是调试中的一个重要步骤,在没有首先找到实际错误并尽你所能自行修复的情况下,进入 SO 并提出问题几乎没有什么用处。

也就是说,您的代码中确实存在一个巨大的明显错误。如果请求不是 POST,和/或表单无效,您希望发生什么?目前,您的代码刚刚停止;所以在任何一种情况下,它都会返回None,这是一个错误:所有视图都必须返回HttpResponse。如果您确实查看了错误消息,那可能就是它所说的内容。

您应该确保您的视图在任何一种情况下至少返回一个空的 HttpResponse。不过,更有用的是实际包含来自表单验证的错误的响应。

【讨论】:

  • 首先,感谢您的评论。但是,如果您查看我的原始帖子,我给出了正在收到的错误,内部服务器错误。我还告诉你问题出在哪里,当它试图保存时。我不关心 else 子句,因为如果该语句中发生错误,则该表单显然是有效的。如果我能够确定问题而不是知道它发生在哪一行,我就不会问这个问题了。
  • 我建议你安装 django-extensions 并使用 /.manage.py runserve_shell 命令。这样,您将在终端中获得更多描述性的回溯。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-05-21
  • 2018-11-23
  • 2020-02-29
  • 1970-01-01
  • 2013-08-25
  • 2011-02-22
  • 2017-09-27
相关资源
最近更新 更多