我正在尝试拥有一个可在管理员中单击但也是只读的 FileField。目前有一个针对此问题的公开票,但我现在需要一个解决方法。我正在尝试为我的管理类编写一个验证器,但是当我运行它时遇到了异常。这是我目前拥有的:
class ModelWithAttachment(models.Model):
attachment = FileField(upload_to=somewhere, blank=True)
class ModelWithAttachmentAdminForm(forms.ModelForm):
class Meta:
model = ModelWithAttachment
def clean_attachment(self):
attachment = self.cleaned_data['attachment']
return self.cleaned_data['attachment']
class ModelWithAttachmentAdmin(admin.ModelAdmin):
form = ModelWithAttachmentAdminForm
目前我得到一个 AssertionError 没有在该行提供异常attachment = self.cleaned_data['attachment']
。如果我用 替换该行cleaned_data = self.cleaned_data
,我会得到相同的 AssertionError。据我了解, self.cleaned_data 应该是在验证过程的早期创建的,所以我不明白为什么它似乎不存在。
其次,我对整个方案的目标是检查通过管理员提交的附件的值与它当前持有的值,如果两者不同,则拒绝它(引发 ValidationError) - 本质上使附件为“只读”,同时允许在管理员中点击它。这是一个可行的目标吗?是否有另一种更好/更简单的方法来实现这一点?