2016-08-16 1 views

Répondre

1

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/

1

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