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

2024-10-04 09:24:09 发布

您现在位置:Python中文网/ 问答频道 /正文

我创建了一个表单,它接受输入并将输入值保存在数据库(mysql)中。我的表格.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'}))

我的模特.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'值。它不起作用。我看到一个答案说我应该。还是不走运

我的观点.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>

我试图通过表单获取输入并将其保存到数据库中。但我没能做到。我不明白为什么。我正在看一些教程和一些问题。还是不行。谢谢你的帮助


Tags: namepyformtitlemodelsrequestformswidget
1条回答
网友
1楼 · 发布于 2024-10-04 09:24:09

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

    # . . .
    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是一个userdata对象,所以需要将它指向一个。例如,做这样的事情

    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()

我不确定如何获取userdatapost,因为这取决于代码的其余部分,但就是这样

您也可能希望创建一个新的userdata对象。可能是这样的:

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

同样,这取决于userdata是什么

相关问题 更多 >