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

To Do List item update in database not working with Django

我想完成我的待办事项应用程序。但是,我仍然无法正确编辑项目。我的想法是通过选择特定项目并用 .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' 对象在我的 [ 中没有与 Aufgabejetzt.save() 相关的属性 'save'views.py。我知道 Aufgabejetzt 实际上是一个字符串对象,因此无法连接到数据库。但这就是重点...我不知道如何正确连接这两者...

我感谢各种帮助!

问题出在这一行:

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

您为对象分配了一个字符串,但该对象没有保存方法。

你可能想要:

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