不使用DetailView Django更新对象

不使用DetailView Django更新对象,django,python-3.x,django-views,django-class-based-views,Django,Python 3.x,Django Views,Django Class Based Views,我正在寻找一个解决方案来更新一个对象,而不必转到详细信息页面,但只需在页面上编辑它。我想要实现的是当我点击编辑时:对象变成一个我可以编辑和保存它的字段。所有YouTube教程都显示编辑->详细信息页面版本 因此,在不离开主页的情况下,对主页上的对象本身进行快速/直接编辑 我已经尝试过使用UpdateView,但是需要单独的HTML文件,这将导致离开主页。我想在这方面得到一些帮助或提示 url.py from django.urls import path from .views import

我正在寻找一个解决方案来更新一个对象,而不必转到详细信息页面,但只需在页面上编辑它。我想要实现的是当我点击编辑时:对象变成一个我可以编辑和保存它的字段。所有YouTube教程都显示编辑->详细信息页面版本

因此,在不离开主页的情况下,对主页上的对象本身进行快速/直接编辑

我已经尝试过使用UpdateView,但是需要单独的HTML文件,这将导致离开主页。我想在这方面得到一些帮助或提示

url.py

from django.urls import path

from .views import (
    HomePageView, 
    TaskCreateView,
    TaskDeleteView,
    TaskUpdateView,
)

urlpatterns = [
    path('', HomePageView.as_view(), name='home'),
    path('task_new/', TaskCreateView.as_view(), name='task_new'),
    path('<int:pk>/task_delete/', TaskDeleteView.as_view(), name='task_delete'),
    path('<int:pk>/task_edit/', TaskUpdateView.as_view(), name='task_edit'),
]
home.html

<!DOCTYPE html>
<html>
<head>
<title>Todo app</title>
</head>
<body>
    <h1>Todo app</h1>
<ul>
    {% for task in all_tasks_list %}
        <li>{{ task.text }}</li>
        <form action="{% url 'task_delete' task.pk %}" method="post">{% csrf_token %}
            <input type="submit" value="Delete"/></form>
        <form action="{% url 'task_edit' task.pk %}" method="post">{% csrf_token %}
            <input type="submit" value="Edit"/>
        </form>
    {% endfor %}
</ul>

<form action="{% url 'task_new' %}" method="post">{% csrf_token %}
    <input type="text" name="text"/>
    <input type="submit" value="Add"/>
</form>
</body>
</html>

错误表示task_form.html不存在,这是UpdateView的默认模板。你确定它存在吗?如果要使用其他模板,则必须指定

class TaskUpdateView(UpdateView):
model = Task
fields = ['text',]
template_name = 'todoapp/my_template.html'

考虑到您使用的是通用视图,您应该遵循以下文档:

在这种情况下,您缺少UpdateView用于呈现
GET
请求的表单

显示给GET请求的UpdateView页面使用 模板名称“\u表单”的后缀

在您的特定情况下,应该创建
todoapp/task\u form.html

{%csrf\u令牌%}
{{form.as_p}}

模板任务的位置是什么\u form.html li没有创建form.html。有必要为我想要的操作创建一个单独的form.html吗?如果你想要一个单页应用程序,你必须使用javascript和ajax调用,这对这里的问题来说太宽泛了,但是你可以用google itaha!非常感谢。您好,谢谢您的回复!我只处理一个HTML文件(home.HTML)。模板名称会将我带到对象详细信息页面(我不想要的)。如果可能的话,我想用UpdateView编辑主页上的对象。嗨,谢谢你的见解。我现在了解到,对于UpdateView,更新它需要单独的form.html,这正是我想要避免的方式。
from django.db import models
from django.urls import reverse

class Task(models.Model):
    text = models.TextField()

    def __str__(self):
        return self.text[:50]

    def get_absolute_url(self):
        return reverse('home')
class TaskUpdateView(UpdateView):
model = Task
fields = ['text',]
template_name = 'todoapp/my_template.html'
<form method="post">{% csrf_token %}
    {{ form.as_p }}
    <input type="submit" value="Update"> </form>