2016-08-16 3 views
0

Я пытаюсь написать представление, в котором сообщение может быть создано, и на той же странице будет отображаться object_list. И даже объект может быть обновлен и удален.Django/Python: Как написать Create, List, Update и Delete в одном представлении или общем представлении?

Country Capital 
India Delhi  UPDATE DELETE 
USA  Washington UPDATE DELETE 
----- ------ 

Я был бы признателен за помощь в достижении этого или предложение аналогичного вопроса.

ответ

1

Что вы ищете в Mixins.

Попробуйте создать класс просмотра подробно со следующими параметрами:

mixins.RetrieveModelMixin, mixins.UpdateModelMixin, mixins.DestroyModelMixin, generics.GenericAPIView

Например:

class ObjectDetail(mixins.RetrieveModelMixin, mixins.UpdateModelMixin, mixins.DestroyModelMixin, generics.GenericAPIView): 

    queryset = Object.objects.all() 

Как предложил Даниилом, если вам нравится ФПИ, 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/

1

Вы смешиваете представление и шаблон. Просмотр запросов обработчика и шаблона отображения содержимого и ссылок. У вас будет ListView, который будет содержать список сообщений. В шаблоне вы добавляете формы для обновления, форму для создания и формы для удаления. Каждая форма будет иметь действие атрибута со ссылкой на соответствующий вид. Таким образом, формы обновления будут иметь ссылку на url с UpdateView, создавать формы для CreateView и удалять DeleteView. В каждой форме вы перенаправляете обратно в ListView. Таким образом, если вы хотите использовать только Django.

ИЛИ

Если вы действительно хотите, чтобы все обрабатывать на одной странице без обновления и перенаправления. Вы можете использовать ajax и django-rest-framework и его viewset. В представлении вы можете обрабатывать списки, создавать, обновлять, нажимать, детализировать в одном классе.

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