Я пытаюсь использовать универсальный класс 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().
Это предложение, похоже, не выполняется, так как я не желаю устанавливать атрибут класса, такой как model
или queryset
, чтобы сохранить динамически генерируемую форму модели.Переопределение get_object
не похоже на создание объекта.
Я попытался переопределить get_queryset()
, но этот метод не принимает параметр request
и не имеет доступа к self.model_name
, который исходит из шаблона URL.
Короче говоря, как можноЯ заставляю CreateView использовать динамическую форму, основанную на параметре, переданном из URL?
Спасибо.