Django如何检测表单字段是否已填写?

Django如何检测表单字段是否已填写?,django,django-models,django-forms,Django,Django Models,Django Forms,在mymodels.py中,我重写save() class Image(models.Model): caption = models.Charfield(max_length=254) image = models.ImageField(upload_to='') def save(self, *args, **kwargs): if self.image: # image manipulations s

在my
models.py
中,我重写
save()

class Image(models.Model):
    caption = models.Charfield(max_length=254)
    image = models.ImageField(upload_to='')

    def save(self, *args, **kwargs):
        if self.image:
            # image manipulations
            super(Image, self).save(*args, **kwargs)
如果在不更改ImageField的情况下保存对象,即用户更改其他字段(如CharField)并更新对象,则操作不应在图像上运行。我没有对此进行测试,但我认为在上面的代码中,self.image始终是正确的,即使用户保存时没有上载新图像来替换旧图像

因此,我计划首先根据用户是否上传了图像文件来检查这一点:

if form.is_valid():
    instance = form.save(commit=False)
    if form.cleaned_data.get('image'):
        image_was_uploaded = True
    instance.save(image_was_uploaded=image_was_uploaded)

这是实现这一点的有效方法,还是有更好的/更具python风格的方法(希望在
models.py
中工作,以便Admin和DRF从相同的功能中获益)?

您可能希望查看自定义ImageField,它将以干净的方法处理自定义处理。例如,看看这个:

我会在form类本身中通过重写clean方法并检查它来完成这项工作。
当您从视图中调用is_valid()时,它将调用clean方法,您可以在该方法中执行此检查。

我如何知道是否上载了新文件以替换旧文件?尝试查看您获得的文件类型,以及它是否是UploadedFile的实例:这看起来是最自然的方法。虽然我不知道如何访问/使用它,但是说
类型(request.FILES['image'])==django.core.FILES.uploadedfile.uploadedfile
正确吗?还是说
isinstance更好(request.FILES['image'],django.core.FILES.uploadedfile.uploadedfile)
?使用isinstance()函数,它更像python,处理潜在的子类。