在Django中删除多个对象

egmofgnx  于 2023-10-21  发布在  Go
关注(0)|答案(2)|浏览(97)

我需要在django中使用网页从数据库中选择几个要删除的对象。没有可供选择的类别,所以我不能像这样删除所有类别。我必须实现我自己的删除表单并在django中处理它吗?或者django已经有办法做到这一点了吗?因为它是在管理界面中实现的。
具体来说,我需要选择的对象删除与网页上的一个形式。然后在我的views.py中处理从表单返回的数据。然后循环遍历表单中返回的内容,并在循环遍历数据时删除。但我想知道在django中实现这一点的最佳实践是什么。

yiytaume

yiytaume1#

您可以删除任何您想要的QuerySet。例如,要删除具有某些Post模型的所有博客文章,

Post.objects.all().delete()

并删除任何未来发布日期的帖子

Post.objects.filter(pub_date__gt=datetime.now()).delete()

但是,您确实需要想出一种缩小QuerySet范围的方法。如果您只想让视图删除特定的对象,请查看删除通用视图。
编辑:
抱歉误会了。我认为答案是介于两者之间。要实现您自己的,请结合使用合并ModelForm x s和generic views x。否则,请查看提供类似功能的第三方应用程序。在related question中,建议使用django-filter

8ftvxx2r

8ftvxx2r2#

我需要在网页上用表格选择要删除的对象。
由于每个对象都有一个唯一的id,因此选择要删除的项的一种方法是使用id。
下面实现了一个示例,其中网页上的按钮传递要删除的对象的ID,该对象在POST请求中的view.py文件中处理。
views.py

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>

它会创建一个类似于以下内容的网页,当单击“删除”按钮时,“John Doe”的条目将被删除。

相关问题