J'essaye d'écrire une vue dans laquelle un article peut être créé et dans la même page, la liste d'objets sera affichée. Et même un objet peut être mis à jour et supprimé. Je souhaiterais m'aider à atteindre cet objectif ou à suggérer un type de question similaire.Django/Python: Comment écrire Créer, Liste, Mettre à jour et Supprimer dans une vue unique ou une vue générique?
Répondre
Qu'est-ce que vous cherchez sont Mixins.
Essayez de créer une vue détaillée de classe avec les paramètres suivants:
mixins.RetrieveModelMixin, mixins.UpdateModelMixin, mixins.DestroyModelMixin, generics.GenericAPIView
Par exemple:
class ObjectDetail(mixins.RetrieveModelMixin, mixins.UpdateModelMixin, mixins.DestroyModelMixin, generics.GenericAPIView):
queryset = Object.objects.all()
Comme proposé par Daniel, si vous aimez DRF, ViewSets sont aussi une vie décente alternative. Cependant, ils ne sont pas exactement succincts donc je les évite généralement quand c'est possible.
Quelque chose comme un ModelViewSet, cependant, est extrêmement clair et l'approche que je choisis généralement.
Voici un exemple:
class ObjectViewSet(viewsets.ModelViewSet):
queryset = Object.objects.all()
def perform_create(self, serializer):
serializer.save(owner=self.request.user)
Belle, est-ce pas? Pour plus de détails, voir le didacticiel DRF: http://www.django-rest-framework.org/tutorial/6-viewsets-and-routers/
Vous mélangez la vue et le modèle. Afficher les demandes de gestion et le contenu et les liens du modèle. Vous aurez ListView, qui contiendra la liste des articles. Dans le modèle, vous ajoutez des formulaires pour la mise à jour, le formulaire pour la création et les formulaires pour la suppression. Chaque formulaire aura une action d'attribut avec un lien vers une vue correcte. Donc, les formulaires de mise à jour auront un lien vers l'URL avec UpdateView, créer des formulaires pour CreateView, et supprimer vers DeleteView. Dans chaque formulaire, vous définissez la redirection vers ListView. De cette façon si vous voulez utiliser seulement Django.
OU
Si vous voulez vraiment tout gérer sur une page sans rafraîchir et redirigeant. Vous pouvez utiliser ajax et django-rest-framework et son viewset. Dans viewset vous pouvez gérer des listes, créer, mettre à jour, pousser, détailler, dans une classe.
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