Yet another simple example. I basically just took the DeleteView example and changed a couple of things.
Before:
@permission_required('calendars.change_eventtype')
def update_type(request,id):
return update_object(request,
model=EventType,
object_id=id,
template_name='eventtype_form.html',
post_save_redirect=reverse('list_type'),
extra_context = {'calendar_menu': CalendarName.menu.all()})
After:
class TypeUpdateView(UpdateView):
template_name = 'eventtype_form.html'
model = EventType
def get_success_url(self):
return reverse('list_type')
## Override dispatch to apply the permission decorator
@method_decorator(permission_required('calendars.change_eventtype'))
def dispatch(self, request, *args, **kwargs):
return super(TypeUpdateView, self).dispatch(request, *args, **kwargs)
## Additional context
def get_context_data(self, **kwargs):
context = super(TypeUpdateView, self).get_context_data(**kwargs)
context['calendar_menu'] = CalendarName.menu.all()
return context
With another example, the generic view declared a form_class instead of a model. The model declaration is not necessary since the related model is tied to the form in its meta section. However, in the class based generic view, both were required (or a queryset could have also been used). I guess the related model info doesn’t make its way back to the class. Hmmmm.
