如何检查Django Admin中的FileField是否已被修改?
我正在尝试创建一个模型,这个模型的文件内容不应该被修改。但是文件的注释是可以修改的。
我做了以下尝试,但我们无法修改注释。请问如何检测是否上传了一个新文件(通过浏览按钮),如果上传了新文件,就只在这种情况下创建模型的新实例?如果没有上传新文件,就更新注释。
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
"""