form等からデータが送られてきて、バリデーションする際に
「あーこいつDBに値あったら処理するけどないならエラー返すわ」
ってしたいとき便利です。
結論から言いますと、Choicefieldを使います。(modelchoicefieldの方)
なんでmodel使うかも流れで説明していきます。
formから値貰うtemplateviewはこんな感じ
from forms import Choice class Test(TemplateView): template_name = 'test.html' def get(self, request, *args, **kwargs): form = Choice(request.GET) if not form.is_valid(): #エラー処理 #以下正常処理
formsはこう
from django import forms from models import * def get_choice_model_deta(): choice_data_query = Choice.objects.all() Choice_list = choice_data_query.values_list('チェック値', '任意') return Choice_list class Choice(forms.Form): form_detail = forms.ChoiceField(choices=get_choice_model_deta())
ちょっとまぁ、嫌ですよね・・・
このためだけにグローバル関数作るのもいけ好かない
実際僕これでマジリク出そうと思ったんですけど、OJTの言葉を思い出しました
「フレームワークがこんなめんどくさいことをさせようとするわけがない」
そ、めんどいことはそれなりの対処がされてるんですよ(標準メソッド漁れ)
(コード統一化+車輪の再発明も防げる)
from django import forms from models import * class Choice(forms.Form): form_detail = forms.ModelChoiceField(queryset=Choice.objects.all())
はい、これだけです。
基本的には、主キーに対してチェックするので、変えたい場合は
to_field_name=''
つけて変えていただければと
後は公式ドキュメントに乗ってるので見ていただければ