管理者でクリック可能であるが読み取り専用でもある 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は検証プロセスの早い段階で作成されているはずなので、なぜ存在しないように見えるのかわかりません。
第二に、このスキーム全体での私の目標は、管理者から送信された添付ファイルの値を現在保持している値と照合し、2 つが異なる場合は拒否 (ValidationError を発生) することです。管理画面でクリックします。これは実現可能な目標ですか?これを達成するための別のより良い/より簡単な方法はありますか?