Django/Python: 如何在单个View或通用视图中编写Create、List、Update和Delete?
Django/Python: How to write Create, List, Update and Delete in a single View or a generic view?
我正在尝试编写一个可以创建 post 的视图,并且在同一页面中,将显示 object_list。甚至可以更新和删除对象。
Country Capital
India Delhi UPDATE DELETE
USA Washington UPDATE DELETE
----- ------
我很乐意帮助我实现这一目标或提出类似类型的问题。
您正在混合使用视图和模板。查看处理请求和模板显示内容和 links。
您将拥有 ListView,其中将包含帖子列表。在模板中,您可以添加用于更新的表单、用于创建的表单和用于删除的表单。每个表单都将具有带有 link 的属性 action 以正确查看。所以更新表单会有link到url用UpdateView,创建表单到CreateView,删除到DeleteView。在每种形式中,您都将重定向设置回 ListView。如果你只想使用 Django 这样的话。
或
如果您真的希望所有内容都在一个页面上处理而无需刷新和重定向。您可以使用 ajax 和 django-rest-framework and its viewset。在视图集中,您可以在一个 class.
中处理列表、创建、更新、推送、详细信息
视图集:
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
你要找的是 Mixins。
尝试使用以下参数创建详细视图class:
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/
我正在尝试编写一个可以创建 post 的视图,并且在同一页面中,将显示 object_list。甚至可以更新和删除对象。
Country Capital
India Delhi UPDATE DELETE
USA Washington UPDATE DELETE
----- ------
我很乐意帮助我实现这一目标或提出类似类型的问题。
您正在混合使用视图和模板。查看处理请求和模板显示内容和 links。 您将拥有 ListView,其中将包含帖子列表。在模板中,您可以添加用于更新的表单、用于创建的表单和用于删除的表单。每个表单都将具有带有 link 的属性 action 以正确查看。所以更新表单会有link到url用UpdateView,创建表单到CreateView,删除到DeleteView。在每种形式中,您都将重定向设置回 ListView。如果你只想使用 Django 这样的话。
或
如果您真的希望所有内容都在一个页面上处理而无需刷新和重定向。您可以使用 ajax 和 django-rest-framework and its viewset。在视图集中,您可以在一个 class.
中处理列表、创建、更新、推送、详细信息视图集:
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
你要找的是 Mixins。
尝试使用以下参数创建详细视图class:
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/