Skip to content

Commit

Permalink
communitydebate: use inline formset for file upload and remove mixin
Browse files Browse the repository at this point in the history
  • Loading branch information
Rineee authored and fuzzylogic2000 committed May 11, 2020
1 parent 8e9259e commit 07b849f
Show file tree
Hide file tree
Showing 4 changed files with 36 additions and 71 deletions.
7 changes: 7 additions & 0 deletions euth/communitydebate/forms.py
Original file line number Diff line number Diff line change
Expand Up @@ -24,3 +24,10 @@ class Meta:
widgets = {
'document': widgets.FileUploadWidget()
}


TopicFileUploadFormset = forms.inlineformset_factory(models.Topic,
models.TopicFileUpload,
TopicFileUploadForm,
extra=1, max_num=3,
can_delete=True)
26 changes: 0 additions & 26 deletions euth/communitydebate/mixins.py

This file was deleted.

3 changes: 3 additions & 0 deletions euth/communitydebate/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -58,3 +58,6 @@ class TopicFileUpload(base.TimeStampedModel):
Topic,
on_delete=models.CASCADE
)

def __str__(self):
return self.title
71 changes: 26 additions & 45 deletions euth/communitydebate/views.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
from django.contrib import messages
from django.db import transaction
from django.shortcuts import render
from django.urls import reverse
from django.utils.translation import ugettext as _
Expand All @@ -13,7 +12,6 @@
from . import forms
from . import models as communitydebate_models
from .filters import TopicFilterSet
from .mixins import TopicFormMixin


class TopicListView(prj_mixins.ProjectPhaseMixin,
Expand Down Expand Up @@ -45,8 +43,7 @@ def get_context_data(self, **kwargs):
return context


class TopicCreateView(PermissionRequiredMixin, generic.CreateView,
TopicFormMixin):
class TopicCreateView(PermissionRequiredMixin, generic.CreateView):
model = communitydebate_models.Topic
form_class = forms.TopicForm
permission_required = 'euth_communitydebate.propose_topic'
Expand All @@ -70,7 +67,7 @@ def get_context_data(self, upload_forms=None, **kwargs):
context['project'] = self.project
context['mode'] = 'create'
if not upload_forms:
upload_forms = self.empty_upload_formset()
upload_forms = forms.TopicFileUploadFormset()
context['upload_forms'] = upload_forms
return context

Expand All @@ -87,31 +84,24 @@ def get_form_kwargs(self):
def post(self, request, *args, **kwargs):
self.object = None
form = self.get_form()
upload_forms = self.filled_upload_formset(request)
if form.is_valid() and upload_forms.is_valid():
response = self.form_valid(form)
self._process_upload_formdata(upload_forms)
messages.add_message(request,
messages.SUCCESS,
_('Topic '
'successfully created'))

else:
response = render(request,
self.template_name,
self.get_context_data(upload_forms=upload_forms))
return response

def _process_upload_formdata(self, upload_forms):
with transaction.atomic():
instances = upload_forms.save(commit=False)
for instance in instances:
instance.topic = self.object
instance.save()


class TopicUpdateView(PermissionRequiredMixin, generic.UpdateView,
TopicFormMixin):
if form.is_valid():
topic = form.save(commit=False)
upload_forms = forms.TopicFileUploadFormset(request.POST,
request.FILES,
instance=topic)
if upload_forms.is_valid():
response = self.form_valid(form)
upload_forms.save()
messages.add_message(request,
messages.SUCCESS,
_('Topic '
'successfully created'))
return response
return render(request, self.template_name,
self.get_context_data(upload_forms=upload_forms))


class TopicUpdateView(PermissionRequiredMixin, generic.UpdateView):
model = communitydebate_models.Topic
form_class = forms.TopicForm
permission_required = 'euth_communitydebate.modify_topic'
Expand All @@ -130,10 +120,8 @@ def get_context_data(self, upload_forms=None, **kwargs):
context['project'] = self.object.project
context['mode'] = 'update'
if not upload_forms:
queryset = \
communitydebate_models.TopicFileUpload.\
objects.filter(topic=self.get_object())
upload_forms = self.update_upload_formset(queryset)
upload_forms = forms.TopicFileUploadFormset(
instance=self.get_object())
context['upload_forms'] = upload_forms
return context

Expand All @@ -144,10 +132,12 @@ def get_form_kwargs(self):

def post(self, request, *args, **kwargs):
form = self.get_form()
upload_forms = self.filled_upload_formset(request)
upload_forms = forms.TopicFileUploadFormset(request.POST,
request.FILES,
instance=self.object)
if upload_forms.is_valid() and form.is_valid():
response = self.form_valid(form)
self._process_upload_formdata(upload_forms)
upload_forms.save()
messages.add_message(request,
messages.SUCCESS,
_('Topic successfully '
Expand All @@ -158,15 +148,6 @@ def post(self, request, *args, **kwargs):
self.get_context_data(upload_forms=upload_forms))
return response

def _process_upload_formdata(self, upload_forms):
with transaction.atomic():
instances = upload_forms.save(commit=False)
for obj in upload_forms.deleted_objects:
obj.delete()
for instance in instances:
instance.topic = self.object
instance.save()


class TopicDeleteView(PermissionRequiredMixin, generic.DeleteView):
model = communitydebate_models.Topic
Expand Down

0 comments on commit 07b849f

Please sign in to comment.