如何解决来自管理员的 Django POST 数据未显示
所以我现在已经看了很多次了,似乎无法找到我一生的问题。
它不仅不显示它查询的数据库信息,而且我似乎无法通过表单向其中添加任何内容。
我拥有的 views.py 方法应该将所有信息渲染到 div 中,但它渲染了正确数量的 div,其中没有任何信息。 此外,正如我在 cmd 上看到的那样,post 请求通过了,但数据库保持不变,并且没有对 HTML 进行任何更改。
请我帮忙。
views.py
from django.shortcuts import render
from .models import Note
def notes(request):
if request.method == "POST":
new_note = request.objects.all()
Note.objects.add(new_note)
return render(request,"notebook/notes.html",{
"notes": Note.objects.all()
})
models.py
from django.db import models
class Note(models.Model):
title = models.CharField(max_length=64)
content = models.CharField(max_length=300)
def __str__(self):
return f"{Note.title} {Note.content}"
layout.html(只是相关部分)
<div class="card content">
<div class="card-body">
<h4 class="card-title" style="font-weight: bold;"> Post A New Note </h4>
<form action="{% url 'notebook:notes' %}" method="post">
{% csrf_token %}
<div class="input"> Note Title </div>
<div><input name="title" style="margin-top: -10px;"></div>
<div class="input">Note Content </div>
<div><input class="note_txt" name="content"></div>
<div class="row">
<input class="btn" type="submit" style="margin-top: 20px;">
<a class="btn rounded" id="close_btn" style="font-weight: bold; margin-top: 20px; right: 0%;">X</a>
</div>
</form>
</div>
</div>
notes.html
{% block body %}
{% for note in notes %}
<div class="col-sm-12 col-md-12 col-lg-3 mx-auto my-1 rounded note" style="min-height: 200px; min-width: 400px; background-color: #F2DCAC; border: 1px solid gray;">
<div class="row" style="justify-content: center; font-size: 20; font-weight: light;">{{ Note.title }}</div>
<div class="col-12">{{ Note.content }}</div>
</div>
{% endfor %}
{% endblock %}
urls.py
from django.urls import path
from . import views
app_name = "notebook"
urlpatterns = [
path('',views.notes,name = "notes"),]
解决方法
您需要像这样从 request.POST
字典中获取数据:
def notes(request):
if request.method == "POST":
content = request.POST.get('content') # <- here
title = request.POST.get('title') # <- here
Note.objects.create(title=title,content=content)
return render(request,"notebook/notes.html",{
"notes": Note.objects.all()
})
但是,请考虑使用 ModelForm,它包含表单验证和更多将来可能会派上用场的功能。你可以这样实现:
# forms.py
from django import forms
class NoteForm(forms.ModelForm):
class Meta:
model = Note
fields = '__all__'
# view
from .forms import NoteForm
def notes(request):
if request.method == "POST":
form = NoteForm(request.POST)
if form.is_valid():
form.save()
return render(request,{
"notes": Note.objects.all()
})
更新
您需要更改模板中的变量:
<div class="col-12">{{ Note.title }}</div>
<div class="col-12">{{ Note.content }}</div>
到
<div class="col-12">{{ note.title }}</div>
<div class="col-12">{{ note.content }}</div>
,
在解决所有问题之后。我在 views.py 文件中发现了一个小错误,可能是您没有保存对象,这就是您的数据库为空的原因,否则您的代码没有问题。
For reference:- https://docs.djangoproject.com/en/3.1/
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。