来自admin的Django POST数据没有显示



所以我已经看了这么多次了,似乎找不到我生命中的问题。

它不仅没有显示它所查询的数据库信息,而且我似乎无法通过表单向它添加任何内容。

我的views.py方法应该将所有信息呈现到div中,但它呈现了正确数量的div,其中没有信息。此外,post请求通过我可以在cmd上看到,但数据库保持不变,并且没有对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, "notebook/notes.html", {
"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/ 

相关内容

  • 没有找到相关文章

最新更新