繁体   English   中英

django __init __()获得了意外的关键字参数'content'

[英]django __init__() got an unexpected keyword argument 'content'

我是django的新手,正在制作小型SNS程序

我建立如下的模型和表格,

models.py

from django.db import models

class modelSNS(models.Model) :
    content = models.TextField(blank = True)
    password = models.CharField(blank = True, max_length = 10)
    date = models.DateField(auto_now = True)

forms.py(我创建了此文件)

from django.forms import ModelForm
from .models import modelSNS

class SNSForm(ModelForm) : 
    class Meta : 
        model = modelSNS
        fields = '__all__'

和我的应用程序的views.py如下所示

views.py

from django.shortcuts import render_to_response, render
from MySNS import models
from .forms import SNSForm
from django.http.response import HttpResponse, HttpResponseRedirect

def SNS_view(request) : 
    content = None
    date = None

    if request.method == 'POST' : 
        form = SNSForm(request.POST)

        if form.is_valid() : 
            form = SNSForm(content=request.POST['content'], password=request.POST['password'])    
            #^ error occur in this line
            form.content = request.POST['content']

            form.save()

        print(form)

        return HttpResponseRedirect('/SNS/')

    else : 
        form = SNSForm()


    return render(request, 'SNS.html', {'form': form, 'content' : content, 'date' : date})

最后,我的html代码在这里

SNS.html

<!DOCTYPE html>
<html>

<head>
    <meta charset="UTF-8">
    <title>SNS</title>
</head>

<body>
<form method="POST">
    {% csrf_token %}

<p><label for="content">Content : </label><textarea id="content" name="content"></textarea></p>
<p><label for="password">Password : </label><input type="password" id="password" name="password"/></p>
<p><input type="submit" value="Submit" /></p>

<br/>
<h2>TimeLine</h2>

</form>
</body>

</html>

我想填写文本字段“内容”和“密码”,然后单击“提交”按钮将其发布

然后保存并在我的页面上打印文章。

但是当我提交数据时,django引发TypeError。

我正在独自学习django,这让我感到非常痛苦。

请告诉我为什么会发生此错误,并给我一些建议

小小的评论将对我有很大帮助

提前致谢

在Form中没有这样的参数称为content

如果要将POST数据传递给Django表单,则可以将其作为第一个位置参数传递,如下所示:

form = SNSForm(request.POST)

或者将名为data关键字参数显式传递给Form ,如下所示:

form = SNSForm(data=request.POST)

当您调用form.is_valid() ,数据已经填充在表单属性中。 无需将诸如contentpassword类的各个字段值传递给表单。

Django的forms.ModelForm将使用request.POST自行填充contentpassword的值。

您要做的就是:

if form.is_valid():
    form.save()
    return redirect('/to-other-page/')

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM