python - Django个人资料图片上传表单将图片保存在两个文件夹中

标签 python django image-processing django-models django-forms

我在 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/

相关文章:

python - 加快在 python 中读取非常大的 netcdf 文件

python - 在显示提示之前评估 Python Interactive Shell 中的提示

python - Flask-SQLAlchemy数据库引擎返回表名,但元数据中的表键为空

django - 大文件上传到 Django Rest Framework

java - 使用java进行形态学闭运算

opencv - 使用 FAST 检测器和 BREIF 提取器 c++ OpenCV 的结果不佳

python - Numpy 在所有行对上广播元素乘积?

Django:CSRF Coo​​kie 未在 iframe 中设置——没有 csrf 豁免的解决方法

python - Django -vs- Grails -vs-?

python - 用零填充 3d numpy 图像数组