【问题标题】:Django how to save POST into form?Django如何将POST保存到表单中?
【发布时间】:2020-07-02 16:59:01
【问题描述】:

我正在尝试将 POST 保存到我的表单中。

views.py

def index(request):

    if request.method == 'POST':
       print('!PRINT request.POST')
       print(request.POST)
       form = PostForm(request.POST, request.FILES)
       print('!PRINT form')
       print(form)
       if form.is_valid():
          form.save()
       return redirect('/')

返回: !PRINT 请求.POST

~'title': ['Bart', 'Mat'], 'Create Match': ['Submit']}>

!打印表格

~name="title" value="Mat" maxlength="200" 需要 id="id_title"

~name="title1" class="errorlist" 此字段为必填项。

forms.py

class PostForm(forms.ModelForm):

    class Meta:
       model = Post
       fields = '__all__'

models.py

class Post(models.Model):
title = models.CharField(max_length=200)
title1 = models.CharField(max_length=200)
created = models.DateTimeField(auto_now_add=True)
def __str__(self):
    return self.title

list.html

<form method="POST" enctype="multipart/form-data" action="/">
{%  csrf_token %}
{{ form.title }}
{{ form.title }}
<input type="submit" name="Create Match">
</form>>

【问题讨论】:

  • 您的模板文件是什么样的?和 PostForm 类?
  • @Gers 感谢您的回复我添加代码
  • 这可能只是一个错字,但似乎您在 list.html 中重复了 {{ form.title }} 字段两次(我猜第二个应该是 form.title1),所以实际上没有数据传递给 form.title1

标签: python django forms post http-post


【解决方案1】:

您没有将值传递给您的表单,没有要保存的数据

试试这样的:

def index(request):
    if request.method == 'POST':
        form = PostForm(request.POST)
        if form.is_valid():
            new_post = name_of_your_model(
                field1=value_you_want_to_safe,
                field2=value_you_want_to_safe,
                ...
            )
            new_post.save()
        return redirect('/')

【讨论】:

    【解决方案2】:

    试试这个sn-p,

    在views.py中

    def index(request):
        form = PostForm()
    
        if request.method == 'POST':
           form = PostForm(request.POST, request.FILES)
    
           if form.is_valid():
               form.save()
               return redirect('/')
    
        return render(request,'path_to/html_template.html',context={'form':form})
    

    在您的 html_template.html 中

    <form method="POST" enctype="multipart/form-data" >
        {%csrf_token%}
        {% form.as_p %}
        <button type="submit">Submit</button>
    </form>
    

    【讨论】:

      猜你喜欢
      • 2021-10-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-10-15
      • 1970-01-01
      • 1970-01-01
      • 2021-04-26
      相关资源
      最近更新 更多