Может ли UpdateView работать без объекта с самого начала?

#django

#django

Вопрос:

Есть ли способ использовать UpdateView без объекта для первого обновления, чтобы я мог передать его через AJAX? Я хочу создать какой-то уникальный UpdateView для всего элемента, где я могу просто выбрать элемент, который я хочу обновить, из выбора.

Могу ли я сделать это с помощью UpdateView или мне нужно будет закодировать представление с нуля_

Ответ №1:

ДА. В вашем UpdateView вы должны переопределить метод get (или метод post, в зависимости от того, что именно вы хотите сделать), вы можете выбрать, что ваш view делает после этого, например:

     ...
    def get(self, request, **kwargs):
        if 'id' in kwargs:
            //perform update
        else:
            //do something else with AJAX
    ...

  

Ответ №2:

Да, вы можете сделать это, определив get_object функцию в своем представлении, а затем получить доступ к соответствующим данным в этой функции, чтобы определить, какой объект обновляется.

https://docs.djangoproject.com/en/3.1/ref/class-based-views/mixins-single-object/#django.views.generic.detail.SingleObjectMixin.get_object

Например:

 class SomeUpdateView(UpdateView):

    ...

    def get_object(self):
        #access info from the URL, like <pk> or <slug>
        object_id = self.kwargs.get('pk')
        
        #alternatively access the request.POST or request.GET data
        some_info = self.request.POST.get('some_info')

        #return a model instance based on some data in this function
        return SomeModel.objects.get(pk=object_id)

    ...