我在 Django 中上传了一张集体图片,但它在
中保存了调整大小图片/media
文件夹和原始大小图片
/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
。管理面板。
我的错误在哪里导致通过表单上传图像时保存双图像?
最佳答案
尝试使用generate_filename :
name = group.image.path
resized_image.save(group.image.generate_filename(group.image, name))
更新模型或重新保存图像时可能会遇到问题。如果确实发生这种情况,您可能可以通过 /
拆分 group.image.path
并获取最后一个实例。
name = group.image.path.split('/')[-1]
关于python - Django个人资料图片上传表单将图片保存在两个文件夹中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60253273/