- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试从 Django 应用程序的数据库中删除一个对象。
这个想法是从 html 文件中获取主要内容并将其发布到表单中。我不明白应该如何传递主键以正确的方式发布我的删除请求。
我查阅了在 stackoverflow、django doc 和其他来源上找到的有关基于类的 View DeleteView 的所有内容,但没有弄清楚它是如何工作的。
How to delete a record in Django models?
Python Django delete current object
How to delete a record in Django models?
https://docs.djangoproject.com/en/2.2/topics/db/queries/
在代码的主要片段下方,如果您缺少所需的内容,请告诉我。
View .py
class SelectFileDelView(TemplateView):
"""
This view is used to select a file from the list of files in the server.
After the selection, it will send the file to the server.
The server will then delete the file.
"""
template_name = 'select_file_deletion.html'
parser_classes = FormParser
queryset = FileModel.objects.all()
def get_context_data(self, **kwargs):
"""
This function is used to render the list of files in the MEDIA_ROOT in the html template
and to get the pk (primary key) of each file.
"""
context = super().get_context_data(**kwargs)
media_path = settings.MEDIA_ROOT
myfiles = [f for f in listdir(media_path) if isfile(join(media_path, f))]
pk_list = []
for value in myfiles:
pk = FileModel.objects.filter(file=value).values_list('pk', flat=True)
pk_list.append(pk)
file_and_pk = zip(myfiles, pk_list)
context['filename'] = file_and_pk
return context
class FileDeleteView(DeleteView):
"""
This class contains the method to delete a file interacting directly with the API.
DELETE requests are accepted.
"""
model = FileModel
fields = ['file']
template_name = 'delete_success.html'
success_url = '/delete_success/'
def post(self, request):
"""
This method is used to making predictions on audio files
loaded with FileView.post
"""
pk = request.POST.getlist('pk').pop()
try:
return Response(pk, status=status.HTTP_200_OK)
except ValueError as err:
return Response(str(err), status=status.HTTP_400_BAD_REQUEST)
select_file_deletion.html
{% extends "index.html" %}
{% block content %}
<form action="/App/delete/" method="post" enctype="multipart/form-data">
{% csrf_token %}
{{ form.as_p }}
<h5>Please select one file at a time from the list below to delete it from the server.</h5>
{% for myfile, pk in filename %}
<p>Are you sure you want to delete "{{ myfile }}"?</p>
<input type="submit" value="Confirm">
<input type="hidden" name="pk" value="{{ pk }}">
<br>
{% endfor %}
<br>
</form>
{% endblock %}
url.py
urlpatterns = [
# Url to select a file to be deleted and confirm the upload
url('filedelete/', SelectFileDelView.as_view(), name='file_delete'),
url('delete_success/(?P<pk>\d+)/$', FileDeleteView.as_view(), name='delete_success'),
]
模型.py
"""
Models.py includes the database structure of the application.
"""
from django.db import models
from django.conf import settings
from django.dispatch import receiver
from django.db.models.signals import post_delete
class FileModel(models.Model):
file = models.FileField(null=True, blank=True)
timestamp = models.DateTimeField(auto_now_add=True)
path = models.FilePathField(path=settings.MEDIA_ROOT, default=settings.MEDIA_ROOT)
@receiver(post_delete, sender=FileModel)
def submission_delete(sender, instance, **kwargs):
"""
This function is used to delete attachments when a file object is deleted.
Django does not do this automatically.
"""
instance.file.delete(False)
错误:
IndexError at /App/delete/
pop from empty list
Request Method: POST
Request URL: http://127.0.0.1:8000/App/delete/
Django Version: 2.2.4
Exception Type: IndexError
Exception Value:
pop from empty list
Exception Location: /Users/marcogdepinto/PycharmProjects/DjangoRestDeepLearning/App/views.py in post, line 131
Python Executable: /Users/marcogdepinto/anaconda3/bin/python
Python Version: 3.6.9
更新1:html已更改如下
<input type="hidden" name="pk" value="{{ pk }}">
这样做,我得到了
AssertionError at /App/delete/
.accepted_renderer not set on Response
完整回溯如下:
Environment:
Request Method: POST
Request URL: http://127.0.0.1:8000/App/delete/
Django Version: 2.2.4
Python Version: 3.6.9
Installed Applications:
['django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'rest_framework',
'App',
'debug_toolbar']
Installed Middleware:
['django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
'debug_toolbar.middleware.DebugToolbarMiddleware']
Traceback:
File "/Users/marcogdepinto/anaconda3/lib/python3.6/site-packages/django/core/handlers/exception.py" in inner
34. response = get_response(request)
File "/Users/marcogdepinto/anaconda3/lib/python3.6/site-packages/django/core/handlers/base.py" in _get_response
145. response = self.process_exception_by_middleware(e, request)
File "/Users/marcogdepinto/anaconda3/lib/python3.6/site-packages/django/core/handlers/base.py" in _get_response
143. response = response.render()
File "/Users/marcogdepinto/anaconda3/lib/python3.6/site-packages/django/template/response.py" in render
106. self.content = self.rendered_content
File "/Users/marcogdepinto/anaconda3/lib/python3.6/site-packages/rest_framework/response.py" in rendered_content
55. assert renderer, ".accepted_renderer not set on Response"
Exception Type: AssertionError at /App/delete/
Exception Value: .accepted_renderer not set on Response
最佳答案
request.POST
是表单输入相应名称/值的键/值对的 QueryDict
。
我认为问题在于您忘记在 pk
输入中添加 name
,因此当您的 View 获取 request.POST
对象,没有名为 pk
的键。
arg
的键,并且没有给出默认值,
.getlist('arg')
将返回一个空列表,这会导致错误得到。
这应该可以解决您的问题:
<input type="hidden" name="pk" value="{{ pk }}">
我相信您遇到的错误与您原来的问题无关,可能应该作为一个新问题提出。话虽这么说,我仍然会尽力提供帮助,我只是没有使用 DRF 的经验。
根据docs :
.accepted_renderer
The renderer instance that will be used to render the response. Set automatically by the APIView or @api_view immediately before the response is returned from the view.
另外:
Unless you want to heavily customize REST framework for some reason, you should always use an APIView class or @api_view function for views that return Response objects. Doing so ensures that the view can perform content negotiation and select the appropriate renderer for the response, before it is returned from the view.
我认为最好的选择是使用 @api_view
装饰器(尽管我不确定这是否适用于基于分类的 View )。
from rest_framework.decorators import api_view
from rest_framework.response import Response
class FileDeleteView(DeleteView):
model = FileModel
fields = ['file']
template_name = 'delete_success.html'
success_url = '/delete_success/'
@api_view
def post(self, request):
...
关于python - Django索引错误: pop from empty list within DeleteView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58149360/
我正在使用与文档中解释的完全一样的 DeleteView https://docs.djangoproject.com/en/2.0/ref/class-based-views/generic-edi
是否有一些优雅的解决方案来使用 Django 的 DeleteView 而不是实际删除对象,将它们标记为非事件状态?我喜欢 DeleteView 的简单性,但希望将数据保留在后端,而不是将其删除。 最
我有一个删除 View : class LectureDelete(SuccessMessageMixin, DeleteView): model = Lecture success_message
我正在尝试编写一个 DeleteView 来删除帖子而不显示确认页面。 Del - delete button .如何立即删除对象? urls.py: urlpatterns = [ # ur
我刚刚学习了 CreateView、UpdateView 和 DeleteView 模型,然后我让它们全部工作起来。我可以更改我的对象,我可以删除它们,但是在删除一个对象后,我尝试创建另一个对象,并创
我正在使用 Django 中的 DeleteView 删除不同模型中的对象。 问题是我不希望对象被完全删除,而只是隐藏起来。首先,我认为保留我的 View 是有意义的,而不是重写每个模型中的 dele
我找到了这个 DeleteView。任何人都可以告诉我 return HttpResponseNotAllowed(['POST']) 是做什么用的?我是否也应该将它添加到我自己的 DeleteVie
我在模板中使用 Django DeleteView,并创建了一个 url 和 View 。是否可以跳过加载_confirm_delete模板的过程并立即发布删除。 最佳答案 DeleteView 响应
这个问题在这里已经有了答案: Example of Django Class-Based DeleteView (4 个答案) 关闭 6 年前。 我正在尝试从特定客户端删除报告,因此目前在我的 ur
我有一个 DeleteView。我想在其中访问相关的对象 ID。当用户发出 POST 请求时。 查看: class DeletePacketView(LoginRequiredMixin, Delet
我有一个包含 2 个条件“帖子”和“用户”的删除 View 。 用户需求由 self.object.user = self.request.user 满足,帖子需求由 slug = self.kwar
我有几个模型,Content 和 Hostname。 Hostname 有一个关联模型的 content_id: class Content(models.Model): name = mod
我有这些模型。每个回复可以没有、一个或多个帖子。帖子是特定于用户的。如何创建删除 View ,以便用户只能删除自己的帖子,而不能删除其他人回复的帖子。我尝试了很多次,但我的观点是删除其他用户的帖子。意
因此,我尝试为我的 Lecture 模型设置一个 DeleteView。我的 Course 模型中的每门类(class)都有自己的 slug 页面。该页面上会出现类(class)讲座。 问题是我尝试为
我需要用JS确认,而不是django的HTML确认。 Here我找到了问题的解决方案,但没有代码示例。请帮助并给我一些代码。这是我的观点: class EmployeeDelete(DeleteVie
有没有人知道或可以请任何人制作一个 Django 基于类的通用 DeleteView 的简单示例?我想继承 DeleteView 并确保当前登录的用户在删除之前拥有该对象的所有权。任何帮助将不胜感激。
我正在尝试实现 DeleteView 并防止在用户不是所有者的情况下删除模型。我敢肯定这是一项非常微不足道的任务,但我无法找到明确的答案。到目前为止,我可以看到我的 View ,但目前每个人都可以删除
在用户删除一个 PieceInstance 后,我想将他重定向到 PieceInstance 所属的 Piece。我使用默认的 DeleteView 并希望将 Piece id(通过 ForeignK
我希望在单击删除按钮时创建一个确认弹出窗口。它目前正在运行并立即删除。这是我的一些代码: View .py: class patientDelete(LoginRequiredMixin, Delet
我是 django 的新手,我遇到了 ajax 的问题。我有下面的代码。 我有一个 django delte View 。我想将它与 ajax 一起使用。现在 View 正在运行,但 CSRF tok
我是一名优秀的程序员,十分优秀!