Django: параметрический класс-на основе представлений

Я пытаюсь использовать общий класс 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-адреса?

Спасибо.

7
задан omat 25 June 2011 в 14:29
поделиться