我创建了一个将接受输入并将输入值保存在数据库(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问题。它仍然不起作用。感谢您的帮助。
答案 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
是什么。