管理者が「保存して別のものを追加」したときに、選択された値が変更されないように、django管理者のフィールド(この場合は「イベント」フィールド)の選択を永続化したいと考えています。これがデフォルトの django の動作であるかどうかはわかりません。いずれにせよ、フォームをオーバーライドして、カスタム フィルタリング/エラー チェックを行いました。ビュー/テンプレートにも触れたくありません。私の最初の計画は、選択した値をセッションに保存し、フォームの初期化時にそれを取得することでしたが、リクエスト オブジェクトを ScoreAdmin フォームに渡す方法が見つかりませんでした。
次に何をすべきかについて何か提案はありますか?
私がこれまでに持っているもの
class ScoreForm(forms.ModelForm):
def __init__(self, *args, **kwargs):
super(ScoreForm, self).__init__(*args, **kwargs)
self.request = kwargs.pop('request', None)
standard_events = Event.objects.filter(event_score_type='STD')
event_widget = self.fields['event'].widget
choices = []
for element in standard_events:
choices.append((element.id, element.name))
event_widget.choices = choices
def clean_score(self):
print self.request.session
print(self.cleaned_data['event'])
selected_event = Event.objects.get(name=self.cleaned_data['event'])
if(selected_event.max_score > selected_event.min_score):
if self.cleaned_data['score'] < 0:
raise forms.ValidationError("Score Cannot Be Negative")
elif self.cleaned_data['score'] > selected_event.max_score:
raise forms.ValidationError("Score Cannot Be Greater Than Best Possible Score of " + str(selected_event.max_score))
elif self.cleaned_data['score'] < selected_event.min_score:
raise forms.ValidationError("Score Cannot Be Less Than Worst Possible Score of " + str(selected_event.min_score))
else:
return self.cleaned_data['score']
elif selected_event.max_score < selected_event.min_score:
if self.cleaned_data['score'] < 0:
raise forms.ValidationError("Score Cannot Be Negative")
elif self.cleaned_data['score'] < selected_event.max_score:
raise forms.ValidationError("Score Cannot Be Less Than Best Possible Score of " + str(selected_event.max_score))
elif self.cleaned_data['score'] > selected_event.min_score:
raise forms.ValidationError("Score Cannot Be Greater Than Worst Possible Score of " + str(selected_event.min_score))
else:
return self.cleaned_data['score']
class Meta:
model = Score
class ScoreAdmin(admin.ModelAdmin):
form = ScoreForm
pass
スクリーンショット