0

モデルには整数フィールドがあります。このフィールドの値の意味は「1.1.1970からの日数」なので、日付をAdminDateWidget簡単に選択できるように、を使用して日付として管理インターフェースに表示したいと思いました。

私の唯一のアイデアは、整数を日付に変換する新しいウィジェットを作成することです。

class ExpireWidget(AdminDateWidget):
    def render(self, name, value, attrs=None):
        if isinstance(value, (int, long)):
            value = datetime.date(1970, 1, 1) + datetime.timedelta(value)
        return super(ExpireWidget, self).render(name, value, attrs)

そして次のコードadmin.py

class LdapUserAdminForm(forms.ModelForm):
    class Meta:
        widgets = {
            'shadow_expire': ExpireWidget
            }

管理者の日付で表示しているときはすべて問題ありませんが、保存する前に日付を整数に変換する必要があります。関数を使って実現できると思いましたがclean_field_name、事前に検証を行っclean_field_nameており(そうclean()ですか?)、整数値を入力する必要があるというエラーが発生します。

検証前に日付をintに変換するにはどうすればよいですか?

4

1 に答える 1

1

各ウィジェットには、POST/GET からデータを取得し、そのデータをフォーム検証用に変換するメソッドがあります。

方法ですdef value_from_datadict(self, data, files, name)

ここで使用されていることがわかります:保存時にjsonオブジェクトを生成するDjango管理者の疑似フォーム

于 2012-03-11T21:04:06.653 に答える