0

管理者でクリック可能であるが読み取り専用でもある 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 を発生) することです。管理画面でクリックします。これは実現可能な目標ですか?これを達成するための別のより良い/より簡単な方法はありますか?

4

1 に答える 1

0

私はそれを考え出した。私のアプローチは正しく、次のclean_attachmentように定義されていました。

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

    return self.cleaned_data['attachment'] 

問題は、古い .pyc ファイルが誤って再利用されることでした。それを削除したら、うまくいきました。それが他の誰かを助けることを願っています。

于 2011-07-22T03:25:55.903 に答える