数据库中的待办事项列表项更新不适用于 Django

Posted

技术标签:

【中文标题】数据库中的待办事项列表项更新不适用于 Django【英文标题】:To Do List item update in database not working with Django 【发布时间】:2021-05-22 21:13:00 【问题描述】:

我想完成我的待办事项应用程序。但是,我仍然无法正确编辑项目。我的想法是通过选择特定项目并用.save() 覆盖其信息来更新数据库。有人能找出正确的update() 函数来让它工作吗?

这是我的代码:

urls.py

from django.urls import path

from . import views

urlpatterns = [
    path("", views.index, name="index"),
    path("<int:aufgabenzettel_id>", views.details, name="details"),
    path("add/", views.add, name="add"),
    path("delete/<int:aufgabenzettel_id>", views.delete, name="delete"),
    path("edit/<int:aufgabenzettel_id>", views.edit, name="edit"),
    path("update/<int:aufgabenzettel_id>", views.update, name="update")
]

models.py

from django.db import models

# Create your models here.
class Aufgabenzettel(models.Model):
    Aufgabeselbst = models.CharField(max_length=64)

    def __str__(self):
        return f"self.Aufgabeselbst"

views.py

from django.http.response import HttpResponseRedirect
from django.shortcuts import render
from django.urls import reverse

from .models import Aufgabenzettel

# Create your views here.
def index(request):
    return render(request, "aufgabenzettel/index.html", 
        "Aufgabenliste":Aufgabenzettel.objects.all()
    )

def details(request, aufgabenzettel_id):
    aufgabenzettel = Aufgabenzettel.objects.get(pk=aufgabenzettel_id)
    return render(request, "aufgabenzettel/details.html", 
        "details":aufgabenzettel
    )

def add(request):
    if request.method == "POST":
        Aufgabe = request.POST["Hinzufügen"]
        Aufgabenzettel.objects.create(Aufgabeselbst=Aufgabe)
        return HttpResponseRedirect(reverse("index"))
    return render(request, "aufgabenzettel/add.html")

def delete(request, aufgabenzettel_id):
    aufgabenzettel = Aufgabenzettel.objects.get(pk=aufgabenzettel_id)
    aufgabenzettel.delete()
    return HttpResponseRedirect(reverse("index"))

def edit(request, aufgabenzettel_id):
    aufgabenzettel = Aufgabenzettel.objects.get(pk=aufgabenzettel_id)
    return render(request, "aufgabenzettel/edit.html", 
        "details":aufgabenzettel
    )

def update(request, aufgabenzettel_id):
    if request.method == "POST":
        Aufgabe = Aufgabenzettel.objects.get(pk=aufgabenzettel_id)
        Aufgabejetzt = request.POST["Bearbeiten"]
        Aufgabejetzt.save()
        return HttpResponseRedirect(reverse("index"))
    else:
        Aufgabe = Aufgabenzettel.objects.get(pk=aufgabenzettel_id)
        return render(request, "aufgabenzettel/edit.html", 
            "details":Aufgabe
        )

index.html

% extends "aufgabenzettel/layout.html" %

% block body %
    <h1>Meine Aufgaben</h1>
    <ol>
        % for Aufgabeselbst in Aufgabenliste %
            <li>
                <a href="% url 'details' Aufgabeselbst.id %"> 
                     Aufgabeselbst 
                </a>
                <form action="% url 'delete' Aufgabeselbst.id %" method="post">
                    % csrf_token %
                <button type="submit">Löschen</button>
                </form>
                <form action="% url 'edit' Aufgabeselbst.id %" method="post">
                    % csrf_token %
                <button type="submit" value=" details ">Bearbeiten</button>
                </form>
            </li>
        % endfor %
    </ol>
    <h2>
        <a href="% url 'add' %">Neue Aufgabe erstellen</a>
    </h2>
% endblock %

add.html

% extends "aufgabenzettel/layout.html" %

% block body %
    <h1>Füge eine neue Aufgabe hinzu</h1>
    <form action="% url 'add' %" method="post">
        % csrf_token %
        <input type="text" name="Hinzufügen" placeholder="Neue Aufgabe">
        <button type="submit">Hinzufügen</button>
    </form>
% endblock %

edit.html

% extends "aufgabenzettel/layout.html" %

% block body %
    <form action="% url 'update' details.id %" method="post">
    % csrf_token %
        <input type="text" name="Bearbeiten" value="details">
        <button type="submit">Bearbeiten</button>
    </form>
    <a href="% url 'index' %">Zurück zu Aufgabe</a>
% endblock %

details.html

% extends "aufgabenzettel/layout.html" %

% block body %
    <h1> details </h1>
    <a href="% url 'index' %">Zurück zu Aufgabe</a>
% endblock %

我收到此错误:'str' 对象在我的 views.py 中没有与 Aufgabejetzt.save() 相关的属性 'save'。我知道 Aufgabejetzt 实际上是一个字符串对象,因此无法连接到数据库。但这就是重点......我不知道如何正确连接这两个......

感谢您的各种帮助!

【问题讨论】:

我刚刚看到有人试图回复。可悲的是,我编辑帖子后评论消失了...... :(你能重新发布吗? 你能发布你的回溯吗?以图片形式发布。 【参考方案1】:

问题出在这一行:

Aufgabejetzt = request.POST["Bearbeiten"]
Aufgabejetzt.save()

您将一个字符串分配给您的对象,该对象上没有保存方法。

你可能想要:

Aufgabe.Aufgabejetzt = request.POST["Bearbeiten"]
Aufgabe.save()

【讨论】:

感谢您的建议!您解决了错误,但它以某种方式没有更新数据库...当我按下 Bearbeiten 按钮时,我只是被重定向到原始任务仍然存在的索引。知道如何解决这个问题吗? 刚发现应该是Aufgabe.Aufgabeselbst = request.POST["Bearbeiten"] ;) 非常感谢您的帮助!非常感谢!

以上是关于数据库中的待办事项列表项更新不适用于 Django的主要内容,如果未能解决你的问题,请参考以下文章

如何从 laravel 的列表中删除待办事项列表项?

使用 jQuery 将新列表项添加到待办事项列表?

待办事项列表应用程序中搜索字段文本中的每个更新的条件渲染

NSDocument 用于关系数据/待办事项列表?

如何使用React删除待办事项列表中的项目

当我将 OnResume 函数用于带有数据库的简单待办事项列表应用程序时,OnCreate 函数被删除