フォームが表示される前に、Djangoモデルのインスタンスを追加するために自動生成されたフォームのフィールドの初期値を設定するにはどうすればよいですか?私はDjango 1.3.1を使用しています。Django admin model addインスタンスフォームの初期データの設定方法は?
私のモデルは以下の通りです:
class Foo(models.Model):
title = models.CharField(max_length=50)
description = models.TextField()
と現在の管理フォームは私がfooの新しいインスタンスを追加するには、管理ページを使用すると、私が取得本当に
class FooAdmin(admin.ModelAdmin):
ordering = ('title',)
特別なものではありませんタイトルと説明のための空のフィールドを持つ素敵なフォーム。私が望むのは、記述フィールドが、関数を呼び出すことによって得られるテンプレートで設定されているということです。
これがあり得ることで私の現在の最高の試み:
def get_default_content():
return 'this is a template for a Foo description'
class FooAdminForm(django.forms.ModelForm):
class Meta:
model = Foo
def __init__(self, *args, **kwargs):
kwargs['initial'].update({'description': get_default_content()})
super(FooAdminForm, self).__init__(self, *args, **kwargs)
class FooAdmin(admin.ModelAdmin):
ordering = ('title',)
form = FooAdminForm
が、私はこれをしようとした場合、私は、このDjangoのエラーを取得:
AttributeError at /admin/bar/foo/add/
'FooForm' object has no attribute 'get'
Request Method: GET
Request URL: http://localhost:8000/admin/bar/foo/add/
Django Version: 1.3.1
Exception Type: AttributeError
Exception Value: 'FooForm' object has no attribute 'get'
Exception Location: /www/django-site/venv/lib/python2.6/site-packages/django/forms/widgets.py in value_from_datadict, line 178
私はここで間違っているかわからない、と私はそれを機能させるために何をすべきですか?私はまた、このエラーについて奇妙なことを発見しました(私はそれを全く見ないという事実を除けば)私のコードには全くFooFormがないということですか?
うわー、魅力のように働いた:
別にこれらから、Djangoの1.7以降の初期フォームの値を設定しますModelAdminの関数
get_changeform_initial_data
があります!このような愚かな間違いのために途中で恐ろしい秘密のメッセージ...あなたの助けをたくさんありがとう! –ところで、私はまたあなたの2番目の提案をうまくやってみました。それはさらにクリーナーなので、もう一度感謝します! –
kwargs ['initial']を設定すると、フォームを保存するときにエラーが発生することがわかりました。私は、if節を設定していた: 場合kwargs.keys()の '初期':。。これは、初期値を表示し、それらを更新するために働いていた kwargsから[ '初期']アップデート(... – Sven