4

私はDjango1.3でクラスベースのビューを実装していますが、CreateView、UpdateView、およびDeleteViewがほぼ同じであるこのシナリオに自分自身を見つけました。単一のビューCreateUpdateViewまたはそのようなものだけでこれを実装する方法はありますか、それともこれはCBGVを実装するための標準的な方法ですか?

また、ThingyAddでは、ThingyEditのようにモデルを指定していませんが、どちらも正常に機能します。モデルは、ModelFormであるform_classのメタ部分であるThingyFormで定義されたモデルによって暗示/ピックアップされると想定しています。この仮定は正しいですか?

class ThingyAdd(AuthMixin, CreateView):
    form_class = ThingyForm
    context_object_name='object'
    template_name='change_form.html'
    success_url='/done/'

class ThingyEdit(AuthMixin, UpdateView):
    model = Thingy
    form_class = ThingyForm
    context_object_name='object'
    template_name='change_form.html'
    success_url='/done/'

class ThingyDelete(AuthMixin, DeleteView):
    model = Thingy
    form_class = ThingyForm
    context_object_name='object'
    template_name='delete_confirmation.html'
    success_url='/done/'
4

1 に答える 1

3

別のミックスインを作成できます

class ThingyMixin(object):
  model=Thingy
  form_class=ThingyForm
  template_name='change_form.html'
  context_object_name='object'
  success_url='/done/'

それからあなたの見解では:

class ThingyAdd( AuthMixin, ThingyMixin, CreateView ):
  pass

class ThingyEdit( AuthMixin, ThingyMixin, UpdateView ):
  pass

class ThingyDelete( AuthMixin, ThingyMixin, DeleteView ):
  template_name='delete_confirmation.html'
于 2012-11-27T15:58:09.967 に答える