【发布时间】: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 的新手,所以非常感谢任何帮助,谢谢。
【问题讨论】: