Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
django-在哪里可以清理表单集的数据?_Django_Django Forms_Django Views_Formset_Django 2.0 - Fatal编程技术网

django-在哪里可以清理表单集的数据?

django-在哪里可以清理表单集的数据?,django,django-forms,django-views,formset,django-2.0,Django,Django Forms,Django Views,Formset,Django 2.0,我有一个视图函数,其中有两个表单,一个用于创建帖子,另一个是用于保存图像的表单集。在哪里可以清理表单集的数据?我想将图像调整为特定大小。我可以为表单集创建一个类似于类的类吗 编辑: formset正在保存,但未清理图像 @login_required(login_url='/accounts/login/') def postCreateView(request): ImageFormset = modelformset_factory(Image, fields=('image',), e

我有一个视图函数,其中有两个表单,一个用于创建帖子,另一个是用于保存图像的表单集。在哪里可以清理表单集的数据?我想将图像调整为特定大小。我可以为表单集创建一个类似于类的类吗

编辑: formset正在保存,但未清理图像

@login_required(login_url='/accounts/login/')
def postCreateView(request):
  ImageFormset = modelformset_factory(Image, fields=('image',), extra=3)
  if request.method == 'POST':
    form = PostCreateForm(request.POST)
    formset = ImageFormset(request.POST or None, request.FILES or None)
    if form.is_valid() and formset.is_valid():
      post = form.save(commit=False)
      post.user = request.user
      post.save()

      i = 1
      for instance in formset:
        try:
         photo = Image(post=post, 
                       image=instance.cleaned_data['image'], 
                       title=str(i))
          photo.save()
        except Exception as e:
          break
        return redirect('posts:post_list')
    else:
      form = PostCreateForm()
      formset = ImageFormset(queryset=Image.objects.none())
      context = {
              'form': form,
              'formset': formset,
      }
      return render(request, 'posts/post_form.html', context)
forms.py

class ImageForm(forms.ModelForm):
    image = forms.ImageField(required=False)

    class Meta:
        model = Image
        fields = ('image',)

    def clean_image(self, *args, **kwargs):
        from PIL import Image
        from io import BytesIO
        from django.core.files.uploadedfile import InMemoryUploadedFile
        from sys import getsizeof

        image = form.cleaned_data("image")
        if not image:
            image = None
            return image

        size = (140,140)

        im = Image.open(image)
        output = BytesIO()
        im.thumbnail(size)
        try:
            im.save(output, format='JPEG', quality=100)
            output.seek(0)
            image = InMemoryUploadedFile(output,'ImageField', "%s.jpg" %image.name.split('.')[0], 'image/jpeg', getsizeof(output), None)
        except:
            im.save(output, format='PNG', quality=100)
            output.seek(0)
            image = InMemoryUploadedFile(output,'ImageField', "%s.png" %image.name.split('.')[0], 'image/png', getsizeof(output), None)

        return image

通常,您将在与表单集关联的
forms.py
中执行此操作。您可以重写clean方法并执行任何您想执行的操作。

您可以引用此方法来调整图像大小,使其更容易/更清晰。我找到了它,创建了一个表单集管理器。谢谢你的帮助。是的,其中一个肯定会有帮助很高兴我能帮忙