django-在哪里可以清理表单集的数据?
我有一个视图函数,其中有两个表单,一个用于创建帖子,另一个是用于保存图像的表单集。在哪里可以清理表单集的数据?我想将图像调整为特定大小。我可以为表单集创建一个类似于类的类吗 编辑: formset正在保存,但未清理图像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
@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方法并执行任何您想执行的操作。您可以引用此方法来调整图像大小,使其更容易/更清晰。我找到了它,创建了一个表单集管理器。谢谢你的帮助。是的,其中一个肯定会有帮助很高兴我能帮忙