如何检查Django Admin中的FileField是否已被修改?

2 投票
1 回答
2345 浏览
提问于 2025-04-15 15:24

我正在尝试创建一个模型,这个模型的文件内容不应该被修改。但是文件的注释是可以修改的。

我做了以下尝试,但我们无法修改注释。请问如何检测是否上传了一个新文件(通过浏览按钮),如果上传了新文件,就只在这种情况下创建模型的新实例?如果没有上传新文件,就更新注释。

admin.py

class CGUAdminForm(forms.ModelForm):
    class Meta:
        model = ConditionsUtilisation

    def clean_file(self):
        if self.instance and self.instance.pk is not None:
            raise forms.ValidationError(_(u'You cannot modify the file. Thank you to create a new instance.'))
        # do something that validates your data
        return self.cleaned_data["file"]

class CGUAdmin(admin.ModelAdmin):
    form = CGUAdminForm

admin.site.register(ConditionsUtilisation, CGUAdmin)

models.py

class ConditionsUtilisation(models.Model):
    date = models.DateField(_(u'Date d\'upload'), editable=False, auto_now_add=True)
    comment = models.TextField(_(u'Commentaire de modification'))
    file = models.FileField(_(u'CGU'), upload_to='subscription/cgu/', storage=CGUFileSystemStorage())

1 个回答

8

在编程中,有时候我们需要让程序根据某些条件来决定要执行的操作。这就像在生活中,我们会根据天气来选择穿什么衣服。如果下雨,我们可能会选择穿雨衣;如果天气晴朗,我们就可以穿轻便的衣服。

同样的道理,在代码里,我们可以使用“条件语句”来实现这种逻辑。条件语句就像是一个判断的开关,它会检查某个条件是否成立,然后根据结果来执行不同的代码。

比如,我们可以写一个简单的条件语句来检查一个数字是正数、负数还是零。根据这个判断,程序就会输出不同的结果。这种方式让我们的程序更加灵活和智能。

总之,条件语句帮助我们在编程中做出决策,就像我们在生活中根据情况做出选择一样。

if 'file' in form.changed_data:
     """
     File is changed
     """
     raise forms.ValidationError("No, don't change the file because blah blah")
else:
     """
     File is not changed
     """

撰写回答