如何使用验证在管理员中创建一个可单击的、伪只读的文件字段?

2024-06-07 22:41:15 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图有一个文件域,可在管理员点击,但也只读。目前有一个针对这个问题的开放的ticket,但我现在需要一个解决方法。我试图为我的管理类编写一个验证器,但我运行它时遇到了一个异常。这是我目前拥有的:

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

目前,我在attachment = self.cleaned_data['attachment']行得到了一个没有异常的AssertionError。如果我用cleaned_data = self.cleaned_data替换这一行,就会得到相同的AssertionError。据我所知,自行清理的数据应该是在验证过程中创建的,所以我不明白为什么它看起来不存在。在

第二,我对整个方案的目标是检查通过管理员提交的附件的值与它当前保存的值,如果两者不同,则拒绝它(引发ValidationError)——本质上使附件“只读”,同时允许在管理员中单击它。这是一个可行的目标吗?有没有其他更好/更简单的方法来实现这一点?在


Tags: 文件方法self目标data附件attachmentmodels
1条回答
网友
1楼 · 发布于 2024-06-07 22:41:15

我想出来了。我的方法是正确的,clean_attachment被定义为:

def clean_attachment(self): 
    if 'attachment' in self.changed_data: 
        raise forms.ValidationError('no!') 

    return self.cleaned_data['attachment'] 

问题是一个旧的.pyc文件被错误地重用。一旦我删掉了,就没事了。希望能帮助别人。在

相关问题 更多 >

    热门问题