Django アプリでは、Django の User モデルとの ManyToMany 関係を含むモデル Bet を使用しています。
class Bet(models.Model):
...
participants = models.ManyToManyField(User)
ユーザーは、フォームを使用して新しい賭けを開始できる必要があります。これまで、賭けには 2 人の参加者がいて、そのうちの 1 人は自分で賭けを作成したユーザーです。つまり、新しい賭けのフォームでは、参加者を 1 人だけ選択する必要があります。フォーム データの保存時に、ベット作成者が参加者として追加されます。
私は自分のためにModelFormを使用していますNewBetForm
:
class NewBetForm(forms.ModelForm):
class Meta:
model = Bet
widgets = {
'participants': forms.Select()
}
def save(self, user):
... # save user as participant
参加者フィールドのウィジェットが再定義されていることに注意してください。これにより、参加者を 1 人だけ選択できるようになっています。
ただし、これにより検証エラーが発生します。
Enter a list of values.
これがどこから来たのかよくわかりません。開発者ツールで POST データを見ると、デフォルトのウィジェットを使用して参加者を 1 人だけ選択した場合とまったく同じように見えます。ただし、to_python()
ManyToManyField のメソッドには、このデータに問題があるようです。Select ウィジェットを有効にすると、少なくとも User オブジェクトは作成されません。
フォームから参加者フィールドを除外して自分で定義することで、この問題を回避できることはわかっていますが、ModelForm の容量を引き続き使用できれば、はるかに良いでしょう (結局のところ、ウィジェットの変更にすぎません)。方法を知っていれば、渡されたデータを何らかの方法で操作できるかもしれません。
問題の正確な内容と、それを解決する良い方法があるかどうかを誰かに教えてもらえますか?
前もって感謝します!
編集
コメントで示唆されているように:ビューの(関連する)コード。
def new_bet(request):
if request.method == 'POST':
form = NewBetForm(request.POST)
if form.is_valid():
form.save(request.user)
... # success message and redirect
else:
form = NewBetForm()
return render(request, 'bets/new.html', {'form': form})