from django.shortcuts import render
from .models import MyModel
def myview(request):
# initialize some data to delete
if request.method == 'GET': MyModel(name='John Doe', score=83).save()
# delete object with the id that was passed in the post request
if request.method == 'POST':
if 'delete' in request.POST:
try:
# id of the object to delete
key = request.POST['delete']
# delete that object
MyModel.objects.get(id=key).delete()
except MyModel.DoesNotExist:
pass
scores = MyModel.objects.all()
return render(request, 'mypage.html', {'scores': scores})
models.py
from django.db import models
class MyModel(models.Model):
name = models.CharField(max_length=50)
score = models.IntegerField()
urls.py
from django.urls import path
from .views import myview
urlpatterns = [
path('mypage/', myview, name='mypage')
]
templates/mypage.html
<form method='post' action={% url 'mypage' %}>
{% csrf_token %}
{% for person in scores %}
{{ person.name }} {{ person.score }}
{% comment %} to differentiate entries, use id {% endcomment %}
<button name='delete', value="{{person.id}}">Delete</button><br>
{% endfor %}
</form>
2条答案
按热度按时间yiytaume1#
您可以删除任何您想要的QuerySet。例如,要删除具有某些Post模型的所有博客文章,
并删除任何未来发布日期的帖子
但是,您确实需要想出一种缩小QuerySet范围的方法。如果您只想让视图删除特定的对象,请查看删除通用视图。
编辑:
抱歉误会了。我认为答案是介于两者之间。要实现您自己的,请结合使用合并
ModelForm
x s和generic views x。否则,请查看提供类似功能的第三方应用程序。在related question中,建议使用django-filter。8ftvxx2r2#
我需要在网页上用表格选择要删除的对象。
由于每个对象都有一个唯一的id,因此选择要删除的项的一种方法是使用id。
下面实现了一个示例,其中网页上的按钮传递要删除的对象的ID,该对象在POST请求中的
view.py
文件中处理。views.py
models.py
urls.py
templates/mypage.html
它会创建一个类似于以下内容的网页,当单击“删除”按钮时,“John Doe”的条目将被删除。