Я пытаюсь использовать общий класс CreateView для обработки форм для набора моделей, унаследованных от того же базового класса.
class BaseContent(models.Model):
...
class XContent(BaseContent):
...
class YContent(BaseContent):
...
Чтобы сохранить СУХОЙ, я хочу определить один класс CreateView, который будет обрабатывать все классы, унаследованные от BaseContent.
Шаблон URL для этого представления:
url(r'^content/add/(?P<model_name>\w+)/$', ContentCreateView.as_view(), name='content_add')
Что-то вроде этого должно работать:
class ContentCreateView(CreateView):
template_name = 'content_form.html'
def get_model(self, request):
# 'content' is the name of the application; model_name is 'xcontent', 'ycontent', ...
return ContentType.objects.get_by_natural_key('content', self.model_name)
Но я получаю это исключение:
ContentCreateView is missing a queryset. Define ContentCreateView.model, ContentCreateView.queryset, or override ContentCreateView.get_object().
Это предложение, похоже, не выполняется, поскольку я не хочу устанавливать атрибут класса например модель
или набор запросов
, чтобы форма модели оставалась динамической. Переопределение get_object
не кажется актуальным для создания объекта.
Я попытался переопределить get_queryset ()
, но этот метод не принимает параметр request
и не имеет доступа к self.model_name
, полученному из шаблона URL .
Короче говоря, как я могу заставить CreateView использовать динамическую форму на основе параметра, переданного с URL-адреса?
Спасибо.