動的なformを作る1 - ModelChoiceField利用編

仕様

  1. あるmodelクラスのデータをコンボボックスで表示する
  2. ログインしたユーザの権限により動的にデータを表示する。

ユーザ

表示するmodelクラスはUserとし、以下のデータがあるものとします。

dynamicform01_01

formを作成

まずは、Userクラスを使ったコンボボックスのformを作成してみます。

forms.py

from django import forms
from django.contrib.auth.models import User

class UserForm(forms.Form):
    choiceuser = forms.ModelChoiceField(queryset = User.objects.all())

実行した結果は以下の通りです。

dynamicform01_02

ModelChoiceFieldを使ったform

forms.py

from django import forms
from dhango.contrib.auth.models import User

class UserForm(forms.Form):
    choiceuser= forms.ModelChoiceField(queryset = User.objects.none())

    def __init__(self, user, *args, **kwargs):
        super(user, self).__init__(*args, **kwargs)

        if user.is_superuser:
            self.field['choiceuser'].queryset = User.objects.all()
        else:
            self.field['choiceuser'].queryset = User.objects.filter(is_staff = False)

実行した結果は以下の通りです。

dynamicform01_03

twitter 2009-08-10 02:08:36.503550

関連ページ

参照サイト

Recent Updates

URLConf Tip 01 - キャプチャの有無にかかわらず同一のviewで処理する
Markdownの入力補助"wmd"をAdmin siteで使う
ModelFormでfieldのwidgetを変更する
動的なformを作る 6 - Dynamic Inline Admin site編
Formsetsを使う3 - inlineformset_factory編
動的なformを作る 5 - django-dynamic-formset編
Formクラスからメディアを定義する
複数のmodelを結合する 2 - Proxy model編
複数のmodelを結合する 1
ModelFormでfieldの表示順番を変える
Admin siteのwidgetを個別に変更する
formfield_overridesを使ってAdmin siteのwidgetを変更する
Admin siteのlist_displayをカスタマイズする - リンク編
Admin siteのlist_displayをカスタマイズする - 基本編
Admin siteのTextareaの高さを自在に変更する - admin.py編