2017-02-22 53 views
0

因此,我正在开发一个使用Django框架的应用程序,并且我需要HTML表单来插入/删除和更新数据库中的数据。我能够使窗体更新数据,但我似乎无法找到任何有关如何创建一个创建窗体和删除按钮的信息。 我试过了,没有成功:Django rest框架 - 从HTML中删除模型对象

HTML

<form action="{% url 'conta_details_html' conta.id %}" data-method="delete"> 

    <input type="submit" value="delete"> 
</form> 

浏览:

class ContaDetailsHTML(APIView): 
    renderer_classes = [TemplateHTMLRenderer] 
    template_name = 'conta_details.html' 

    def get(self, request, pk): 
     user = request.user 
     conta = get_object_or_404(Conta, pk=pk,user=user) 
     serializer = ContaDetailsSerializerHTML(conta) 
     return Response({'serializer': serializer, 'conta': conta}) 

    def delete(self,request,pk): 
     """Deletes a transaccao""" 
     user = request.user 
     if not user.is_authenticated: 
      return Response(status=status.HTTP_403_FORBIDDEN) 
     conta = get_object_or_404(Conta, pk=pk, user=user) 
     serializer = ContaDetailsSerializerHTML(conta,many=False) 
     if conta: 
      conta.delete() 
      return Response(status=status.HTTP_200_OK) 
     return Response(serializer.errors,status=status.HTTP_400_BAD_REQUEST) 

也许我没有得到的HTML语法正确,但更新的形式是很容易,如下所示:

<form action="{% url 'conta_details_html' conta.id %}" method="POST"> 
    {% csrf_token %} 
    {% render_form serializer %} 
    <input type="submit" value="Save"> 
</form> 

任何想法 ?

编辑:

网址:

url(r'^api/html/contas/(?P<pk>[0-9]+)/$', views.ContaDetailsHTML.as_view(), name='conta_details_html'), 

回答

0

哦甚至删除是很容易。你错过了这里的一些东西。 1. DELETE是一个HTTP动词,表单中的您的方法字段可以采用其中之一。

<form action="{% url 'conta_details_html' conta.id %}" data-method="delete" method="DELETE"> 

    <input type="submit" value="delete"> 
</form> 
  • 在你删除视图,您试图serialiaze但你并不需要。

    def delete(self, request, pk): 
        """Deletes a transaccao""" 
        user = request.user 
        if not user.is_authenticated: 
         return Response(status=status.HTTP_403_FORBIDDEN) 
        conta = get_object_or_404(Conta, pk=pk, user=user) 
        conta.delete() 
        return Response(status=status.HTTP_200_OK) 
    
  • +0

    是不是很简单?我试过,但是当我按下按钮时,什么也没有发生 –

    +0

    我编辑了这个问题以提供更多信息 –

    +0

    您可以尝试一个基于API的DELETE请求,它应该可以工作。包含DELETE作为操作的表单存在兼容性问题。其他明智的做法是使端点api/html/contas /(?P [0-9] +)/删除并使用相同的方式写入POST处理程序。 –