ジェネリックCreateViewクラスを使用して、同じ基本クラスから継承された一連のモデルのフォームを処理しようとしています。
class BaseContent(models.Model):
...
class XContent(BaseContent):
...
class YContent(BaseContent):
...
物事を乾いた状態に保つために、BaseContentから継承されたすべてのクラスを処理する1つのCreateViewクラスを定義したいと思います。
そのビューの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()
ましたが、このメソッドはパラメーターを受け入れず、URLパターンからのrequest
パラメーターにアクセスできません。self.model_name
簡単に言うと、URLから渡されたパラメータに基づいてCreateViewに動的フォームを使用させるにはどうすればよいですか?
ありがとう。