我正在尝试编写一个可以创建帖子的视图,并且在同一页面中,将显示object_list。甚至可以更新和删除对象。
Country Capital
India Delhi UPDATE DELETE
USA Washington UPDATE DELETE
----- ------
我希望帮助我实现这一目标或提出类似的问题。
答案 0 :(得分:1)
您正在混合视图和模板。查看句柄请求和模板显示内容和链接。 您将拥有ListView,其中包含帖子列表。在模板中,您可以添加更新表单,创建表单和删除表单。每个表单都有属性操作,并链接到正确的视图。因此,更新表单将链接到使用UpdateView的url,创建表单到CreateView,以及删除到DeleteView。在每个表单中,您将重定向设置回ListView。这样,如果你只想使用Django。
或强>
如果你真的想要在一个页面上处理所有内容而不刷新和重定向。您可以使用ajax和django-rest-framework及其viewset。在视图集中,您可以在一个类中处理列表,创建,更新,推送,详细信息。
<强>视图集:强>
class UserViewSet(viewsets.ViewSet):
"""
Example empty viewset demonstrating the standard
actions that will be handled by a router class.
If you're using format suffixes, make sure to also include
the `format=None` keyword argument for each action.
"""
def list(self, request):
pass
def create(self, request):
pass
def retrieve(self, request, pk=None):
pass
def update(self, request, pk=None):
pass
def partial_update(self, request, pk=None):
pass
def destroy(self, request, pk=None):
pass
答案 1 :(得分:1)
你正在寻找的是Mixins。
尝试使用以下参数创建详细视图类:
mixins.RetrieveModelMixin, mixins.UpdateModelMixin, mixins.DestroyModelMixin, generics.GenericAPIView
例如:
class ObjectDetail(mixins.RetrieveModelMixin, mixins.UpdateModelMixin, mixins.DestroyModelMixin, generics.GenericAPIView):
queryset = Object.objects.all()
正如Daniel所提出的,如果你喜欢DRF,ViewSets也是一个不错的选择。但是,它们并不完全简洁,所以我通常会尽可能避免使用它们。
然而,像ModelViewSet这样的东西非常明确,我通常会选择这种方法。
以下是一个例子:
class ObjectViewSet(viewsets.ModelViewSet):
queryset = Object.objects.all()
def perform_create(self, serializer):
serializer.save(owner=self.request.user)
美丽,不是吗?
有关详细信息,请参阅DRF教程:http://www.django-rest-framework.org/tutorial/6-viewsets-and-routers/