【问题标题】:Django refreshing records at template only after re-running serverDjango仅在重新运行服务器后刷新模板中的记录
【发布时间】:2021-10-13 19:15:18
【问题描述】:

我刚刚开始学习 Django,并且正在制作我的第一个应用程序。当我将记录添加到数据库时,我遇到了一个奇怪的问题,它实际上将它添加到那里,但它不会在我的页面上显示它们,直到我通过以下命令重新加载服务器

python manage.py runserver

views.py

from django.shortcuts import render, redirect

from .models import Students

student_data = Students.objects.all()

def homePage(request):
    return render(
        request,
        "pages/homePage.html",
        {"student_data": student_data},
    )


def createStudent(request):
    form = StudentForm()
    if request.method == "POST":
        form = StudentForm(request.POST, request.FILES)
        if form.is_valid():
            form.save()
            return redirect("homePage")
    context = {"form": form}
    return render(request, "pages/addStudent.html", context)


def updateStudent(request, pk):
    student = Students.objects.get(unique_id=pk)
    form = StudentForm(instance=student)

    if request.method == "POST":
        form = StudentForm(request.POST, request.FILES, instance=student)
        if form.is_valid():
            form.save()
            return redirect("homePage")
    context = {"form": form}
    return render(request, "pages/addStudent.html", context)


def deleteStudent(request, pk):
    student = Students.objects.get(unique_id=pk)
    if request.method == "POST":
        student.delete()
        return redirect("homePage")
    context = {"object": student}
    return render(request, "pages/delete-template.html", context)


def viewStudent(request, pk):
    student = Students.objects.get(unique_id=pk)
    context = {"student": student}
    return render(request, "pages/view_student.html", context)

models.py

class Students(models.Model):
    name = models.CharField(max_length=200)
    surname = models.CharField(max_length=200)
    card_id = models.IntegerField()
    unique_id = models.UUIDField(
         default=uuid.uuid4, 
         unique=True,
         primary_key=True, 
         editable=False)
    student_image = models.ImageField(null=True, blank=True, default="default_student.jpg")
    class Meta:
        verbose_name_plural = 'Students'

    #Methods
    def __str__(self):
        return f'{self.name} {self.surname}'

addStudent.html

{% extends "main.html" %}

{% block addStudent %}
    <form method="POST" enctype="multipart/form-data">
        {% csrf_token %}
        {{form.as_p}}
        <input type="submit"/>
    </form>
{% endblock addStudent %}

这是我主页的图片: Home Page

这是在数据库中创建记录的表单: addStudent.html page

但是在提交表单后,django 没有向我显示记录,我刚刚创建。 它什么也不显示。

我需要重启服务器才能看到记录:

after re-running server

我认为在我开始使用静态文件并添加后出现了该错误

student_image = models.ImageField(null=True, blank=True, default="default_student.jpg")

以前有人遇到过这个问题吗?

【问题讨论】:

  • 你能添加应该显示创建记录的视图吗?
  • 如果您想在不刷新的情况下查看添加到数据库的数据,您可以使用 ajax
  • @IainShelvington 添加了
  • @PapisSahine 也许,但在我开始使用静态文件之前它工作得很好。我想弄清楚此时出了什么问题,它一定对将来遇到同样问题的人有用
  • 添加为您的主页提供服务的视图,您使用的查询集可能有问题

标签: django django-models django-forms django-templates


【解决方案1】:

您需要对每个请求执行student_data 查询,目前它只执行一次,并且第一个查询的结果正在被重用。您可以通过两种方式做到这一点:

首先,如果要将student_data 保留为全局变量,可以在查询集上调用.all() 再次执行它

from django.shortcuts import render

from .models import Students

student_data = Students.objects.all()


def homePage(request):
    return render(
        request,
        "pages/homePage.html",
        {"student_data": student_data.all()},
    )

其次,您可以在每次调用视图时定义查询集以获取新数据

from django.shortcuts import render

from .models import Students


def homePage(request):
    return render(
        request,
        "pages/homePage.html",
        {"student_data": Students.objects.all()},
    )

【讨论】:

    猜你喜欢
    • 2021-02-16
    • 2011-05-18
    • 2011-04-03
    • 1970-01-01
    • 2013-08-13
    • 2016-05-16
    • 1970-01-01
    • 2021-12-25
    • 2013-11-04
    相关资源
    最近更新 更多