为什么Django表单输入未保存在数据库中?

时间:2019-05-06 20:46:30

标签: python django django-models django-forms django-views

我创建了一个将接受输入并将输入值保存在数据库(mysql)中的表单。我的forms.py

class postcreation(forms.Form):
    post_title = forms.CharField(max_length=200, widget=forms.TextInput(attrs={'name':'post_title'}))
    post_name = forms.CharField(max_length=200, widget=forms.TextInput(attrs={'name':'post_name'}))
    post_post = forms.CharField(widget=forms.Textarea(attrs={'name':'post_post'}))

我的models.py

class postdata(models.Model):

    title = models.CharField(max_length=200)
    name = models.ForeignKey(userdata, on_delete='CASECADE')
    post = models.TextField()

    def __str__(self):
        return self.title

起初我没有使用'attr'值。没用我看到一个stackoverflow回答,说我应该。还是没有运气。

我的views.py

def postinput(request):

    if request.method == 'POST':
        form = postcreation(request.POST)
        if form.is_valid():
            inputpost = postdata(title=request.POST['post_title'], name=request.POST['post_name'], post=request.POST['post_post'])
            inputpost.save()
            return redirect('index')
    else:
        form = postcreation()

    context = { 'form': form }
    return render(request, 'firstapp/postinput.html', context)

html模板

<form method="POST" action="{% url 'index' %}">
    {% csrf_token %}
    {{ form }}
    <button type="submit">Post</button>
</form>

我试图通过表单获取输入并将其保存到数据库。但我无法做到这一点。我不明白为什么。我正在阅读一些教程和一些stackoverflow问题。它仍然不起作用。感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

您可以从经过验证的表单而不是直接从请求中获取值,如下所示:

    # . . .
    if form.is_valid()
        inputpost = postdata(title=form.cleaned_data.get('title'), 
                             name=form.cleaned_data.get('name'), 
                             post=form.cleaned_data.get('post'))
    # . . .

由于postdata.name是一个用户数据对象,因此需要将其指向一个。例如,做这样的事情

    if form.is_valid()
        inputpost = postdata(title=form.cleaned_data.get('title'),
                             post=form.cleaned_data.get('post'))

        name=form.cleaned_data.get('name')
        inputpost.name = userdata.objects.get(name=name) # or something similar, 
                                                         # depending on what exactly 
                                                         #`userdata` is and how 
                                                         # to get the relevant instance.
        inputpost.save()

我不确定确切如何获取userdata帖子,因为这取决于您代码的其余部分,但是就是这样。

您可能还想创建一个新的userdata对象。就像这样:

        # . . . 
        name=form.cleaned_data.get('name')
        ud = userdata(name=name)
        ud.save()
        inputpost.name = ud, 
        inputpost.save()
        # . . . 

再次取决于userdata是什么。