【问题标题】:how to delete and objects from the db without refreshing the page?如何在不刷新页面的情况下从数据库中删除和对象?
【发布时间】:2019-12-30 18:42:36
【问题描述】:

我有一个显示数据库中每个对象的页面,这是由一个 ajax 函数处理的,该函数获取一个包含数据库中每个对象的 JSON 文件,并为每个对象呈现一些 html 代码。 还有一个经典的 Django ModelForm 允许创建新 db 的对象,新对象会立即与其他对象一起加载。

我想要一个“动态”删除它的每个对象的 html 按钮,因此无需重定向到详细信息删除模板。


$('.remove').on('click', function() {
  $.ajax({
    type:'DELETE'
    url: 'http://127.0.0.1:8000/MyApp/list-api/' + $(this).attr('data-id')
}

当按钮被点击时,它应该向对象的详细 api 的 url 发送一个 DELETE 请求。没有任何反应,浏览器的网络选项卡中没有新请求。

这是我的 index.html

<body>
    <h2>coffee orders</h2>
    <ul id="orders">

    </ul>

    <h4>Add coffee order</h4>

<form method="POST" action=".">
    {% csrf_token %}
    {{form.as_p}}
    <button id="add-order" type="submit">Add!!!</button>
</form>




    <script src="https://code.jquery.com/jquery-3.4.1.min.js"></script>
    <script src="{% static 'MyApp/jquery_js.js' %}"></script>

</body>

这是我的 jquery.js, 此函数获取 api 并呈现有关对象的信息和不起作用的删除按钮。

$(function (){

    var $orders = $('#orders')

    $.ajax({
        type: 'GET',
        url: 'http://127.0.0.1:8000/MyApp/list-api/?format=json',
        success: function(orders) {
            $.each(orders, function(i, order){
                $orders.append('<li>name: '+order.name+', drink: 
                               '+order.drink+'</li>')
                $orders.append("<form method='DELETE'><button data-id=" + 
                               (order.pk)+" class='remove'>X</button>")
            });
        },
        error: function() {
        alert('errore caricamento ordini');
        }
    });
def list_create_view(request):
    form = DrinkModelForm(request.POST or None)
    if form.is_valid():
        print(form.cleaned_data)
        obj = form.save(commit=False)
        obj.user = request.user
        form.save()
        form = DrinkModelForm()
    context = {"form": form}
    return render(request, "MyApp/index.html", context)


class OrderListView(generics.ListCreateAPIView):
    pass
    serializer_class = OrderSerializer

    def get_queryset(self):
        return Order.objects.all()


class OrderDetailView(generics.RetrieveDestroyAPIView):
    pass
    serializer_class = OrderSerializer

    def get_object(self):
        id_ = self.kwargs.get("pk")
        return get_object_or_404(Order, pk=id_)

X 按钮应该从数据库中删除对象,但什么也没有发生,我是 jquery 的新手,所以非常感谢任何帮助,谢谢。

【问题讨论】:

    标签: python django ajax rest


    【解决方案1】:

    您应该使用OrderDetailView 进行删除,并从类定义中删除pass。顺便说一句,如果您在 URL 上传递 pk,则无需覆盖 get_object 方法。

    views.py

    class OrderDetailView(generics.RetrieveDestroyAPIView):
        queryset = Order.objects.all()
        serializer_class = OrderSerializer
    

    【讨论】:

    • 感谢您让我的视图更清晰,是的,我可以使用 django rest 框架面板进行删除或 django 管理面板,但关键是我想从处理检索和处理的同一 html 模板中处理删除创建。基本上我想赋予用户从数据库中删除 obj 的权力
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-18
    • 1970-01-01
    • 2013-12-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多