我正在尝试使用通用 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 传递的参数的动态表单?
谢谢。