未显示来自管理员的 Django POST 数据

Django POST data from admin not being displayed

所以我已经检查了很多次了,似乎无法找到我一生的问题。

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

我使用的 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"),
]

解决所有问题后。我在 views.py 文件中发现了一个小错误,可能是你没有保存对象,这就是你的数据库为空的原因,否则你的代码没有问题。

   For reference:- https://docs.djangoproject.com/en/3.1/ 

您需要像这样从 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>