как сделать Django DeleteView универсальным?

#python #django

#python #django

Вопрос:

Я использую django DeleteView класс для удаления разных записей. Единственное, что отличается от вызова к вызову, — это атрибут модели. В любом случае есть только один вызов для удаления для разных моделей? Я предлагаю что-то в этом роде, но я не знаю, как это реализовать. Есть предложения?

views.py :

 class Delete(DeleteView):

    template_name='kammem/delete.html'
    success_url=reverse_lazy('forl')
    model=super().get_context_data()

    def get_context_data(self,**kwargs):
  
         mod=self.kwargs['model']        
         if mod=='forening':
             model=forening
         elif mod=='person'

 return model
 

urls.py :

  path('delete/<int:pk>/<str:model>',Delete.as_view(),name='delete'),
 

Комментарии:

1. Вы могли бы написать представление для удаления моделей на основе имени модели в пути. Интересно, сколько у вас моделей, чтобы это было предпочтительнее, чем писать DeleteView для каждого. По мере усложнения вашего приложения вы можете начать сожалеть о том, что один класс обрабатывает так много путей кода.

2. Если вы еще этого не видели, это может быть полезно при разработке того, что наследовать: ccbv.co.uk/projects/Django/3.0/django.views.generic.edit /…

3. дело в том, что вместо того, чтобы писать множество представлений удаления, которые отличаются только именем модели, я хочу передать имя модели в URL, а затем передать правильное в представлении удаления. т.е. Один вид удаления вместо многих из них.

4. Там, где я нахожусь, уже поздно, поэтому я не собираюсь писать это для вас. Один совет, который я могу вам дать, заключается в том, что вы можете использовать эту функцию вместо блока if-else: docs.djangoproject.com/en/3.0/ref/applications /…

5. Хотя вам нужно быть осторожным, чтобы не раскрывать модели, которые вы не хотели бы, чтобы пользователь удалял.