【发布时间】:2020-02-16 21:14:45
【问题描述】:
我在 Django 中上传了一组图片,但它保存了 resized 图片在
/媒体
文件夹和原始尺寸图片在
/media/group_pics
文件夹。
models.py:
class Group(models.Model):
name = models.CharField(max_length=15, unique=True)
date_created = models.DateField(default=timezone.now)
image = models.ImageField(default='group_pics/default-group.jpg', upload_to='group_pics/')
def __str__(self):
return self.name
def image_url(self):
if self.image and hasattr(self.image, 'url'):
return self.image.url
def save(self, *args, **kwargs):
try:
group = Group.objects.get(id=self.id)
if not ('default-group.jpg' in group.image.url) and group.image != self.image:
group.image.delete()
except: pass
if not self.slug:
self.slug = self._get_unique_slug()
super().save(*args, **kwargs)
forms.py
class GroupUpdateForm(ModelForm):
image = forms.ImageField(max_length=150, allow_empty_file=False)
x = forms.FloatField(widget=forms.HiddenInput(), required=False)
y = forms.FloatField(widget=forms.HiddenInput(), required=False)
width = forms.FloatField(widget=forms.HiddenInput(), required=False)
height = forms.FloatField(widget=forms.HiddenInput(), required=False)
class Meta:
model = Group
fields = ['image']
def save(self):
group = super(GroupUpdateForm, self).save(commit=False)
if self.cleaned_data.get('x') != None:
x = self.cleaned_data.get('x')
y = self.cleaned_data.get('y')
w = self.cleaned_data.get('width')
h = self.cleaned_data.get('height')
image = Image.open(group.image)
cropped_image = image.crop((x, y, w+x, h+y))
resized_image = cropped_image.resize((350, 350), Image.ANTIALIAS)
resized_image.save(group.image.path)
group.save()
return group
当我这样做时
print(group.image.path)
在 def save(): 下的 forms.py 中,它打印出 media\picture.jpg 而它应该是 media\group_pics\picture.jpg
和views.py
if request.method == 'POST':
update_form = GroupUpdateForm(request.POST, request.FILES, instance=group)
if update_form.is_valid():
update_form.save()
预期行为:它只将调整大小的图片保存到/media/group_pics文件夹
如果我使用管理面板,它只会上传到/media/group_pics。
通过表单上传图像时导致双图像保存的错误在哪里?
【问题讨论】:
-
如果您通过管理面板上传图片,其行为是否相同?
-
@revliscano 不,如果我通过管理面板上传,它只会在
/media/group_pics folder上传 -
好的,很明显问题出在表格上。不过,一切似乎都是正确的。保存在 /media 中的图像只是
resized_image的图像,对吧? -
@revliscano 是的,我刚刚发现在
/media/group_pics它保存了未调整大小的原始图片。在/media中,它会保存调整大小的图片。我编辑了原始帖子。 -
我会在本地做一些测试,看看我是否发现了错误 ;-)
标签: python django image-processing django-models django-forms