Я загружаю несколько файлов, и я хотел бы использовать классы в models.py
, forms.py
, а также views.py
, чтобы код легко изменялся в одном месте и использовался повторно.
Проблема, с которой я столкнулся, заключается в том, что я не понимаю, как реализовать представление на основе классов для загрузки файлов, которое позволяет мне создавать экземпляры для повторного использования.
Я попытался реализовать представление на основе классов, как показано ниже, но я считаю, что мне нужно вставить метод init и вставить self.
в атрибуты, но я не уверен, что есть функции например reverse_lazy
в атрибутах.
Мои views.py
class FileUploadView(View):
form_class = DocumentForm
success_url = reverse_lazy('home') # want different url for every instance
template_name = 'file_upload.html' # same for template_name
def get(self, request, *args, **kwargs):
form = self.form_class()
return render(request, self.template_name, {'form': form})
def post(self, request, *args, **kwargs):
form = self.form_class(request.POST, request.FILES)
if form.is_valid():
form.save()
return redirect(self.success_url)
else:
return render(request, self.template_name, {'form': form})
РЕДАКТИРОВАТЬ: Как предложил Гасанов, вы можете вставить success_url
и template_name
в качестве параметров в url_patterns
следующим образом:
urlpatterns = [
path('stylist/', payroll_views.FileUploadView.as_view(
success_url=reverse_lazy('landing.html'), template_name='stylist.html'), name='stylist'),
]
Это позволяет повторно использовать представление на основе классов простым и прагматичным способом.