Esempio n. 1
0
 def post(self, request, *args, **kwargs):
     formset = self.ModelFormSet(request.POST, prefix=self.formset_prefix)
     if formset.is_valid():
         self.object.is_accepted = True
         self.object.save()
         for form in formset:
             instance = form.save(commit=False)
             instance.save()
             if 'nominations' in form.changed_data:
                 nominations = [nomination.id for nomination
                                in form.cleaned_data['nominations']]
                 currents = instance.nominations.values_list(
                     'id', flat=True)
                 removed_nominations = list(
                     set(currents) - set(nominations))
                 added_nominations = list(
                     set(nominations) - set(currents))
                 VideoNomination.objects.filter(
                     participant_video=instance,
                     nomination__in=removed_nominations).delete()
                 VideoNomination.objects.bulk_create([
                     VideoNomination(
                         nomination_id=nomination,
                         participant_video=instance)
                     for nomination in added_nominations])
         notify_success(request, u'Данные сохранены')
         participant_reviewed.send(self, participant=self.object)
         return HttpResponseRedirect(self.get_success_url())
     notify_error(request, u'При сохранении произошла ошибка')
     return self.render_to_response(self.get_context_data(
         form=self.get_form(self.get_form_class()), formset=formset))
Esempio n. 2
0
    def form_valid(self, form):
        MAX_WIDTH = 500

        try:
            coords = json.loads(form.cleaned_data['avatar_coords'])
        except ValueError:
            coords = {
                'x': 0,
                'y': 0,
                'x2': 175,
                'y2': 175,
            }
            # Загружен ли уже аватар и мы только должны его обрезать?
        img = Image.open(self.request.FILES.get('logo', self.object.logo))
        img = img.convert('RGB')

        # Если загружаемый аватар слишком маленький
        if img.size[0] < 175 or img.size[1] < 175:
            form_errors = form._errors.setdefault('logo', ErrorList())
            form_errors.append(
                u'Размер изображения должен быть больше 175x175 пикселей.')

            notify_error(self.request, message=u'''
            Произошла ошибка при обновлении логотипа.
            Размер изображения должен быть больше 175x175 пикселей.''')
            return self.render_to_response(self.get_context_data(form=form))

        # Если изображение слишком широкое, ужимаем
        if img.size[0] > MAX_WIDTH:
            aspect = img.size[0] / MAX_WIDTH
            new_height = int(round(img.size[1] / aspect))
            # Вот с этим изображением мы и будем работать
            img = img.resize((MAX_WIDTH, new_height), Image.ANTIALIAS)

        # Иначе просто обрезаем
        cropped_image = img.crop((coords['x'],
                                  coords['y'],
                                  coords['x2'],
                                  coords['y2']))
        cropped_image.thumbnail((175, 175), Image.ANTIALIAS)

        temp_handle = StringIO()
        cropped_image.save(temp_handle, 'jpeg', quality=100)
        temp_handle.seek(0)

        suf = SimpleUploadedFile(
            'min.jpg', temp_handle.read(), content_type='image/jpg')

        self.object.min_logo.save('min.jpg', suf, save=False)
        form.save()

        notify_success(self.request, message=u'Логотип успешно обновлен.')

        return HttpResponseRedirect(self.get_success_url())