在 Django 应用程序中,我有一个模型 Bet,其中包含与 Django 用户模型的 ManyToMany 关系:
class Bet(models.Model):
...
participants = models.ManyToManyField(User)
用户应该能够使用表格开始新的投注。到目前为止,投注只有两个参与者,其中之一是自己创建投注的用户。这意味着在新投注的表格中,您必须选择一位参与者。保存表单数据后,投注创建者将被添加为参与者。
我正在使用 ModelFormNewBetForm
:
class NewBetForm(forms.ModelForm):
class Meta:
model = Bet
widgets = {
'participants': forms.Select()
}
def save(self, user):
... # save user as participant
请注意参与者字段的重新定义小部件,它确保您只能选择一名参与者。
但是,这给了我一个验证错误:
Enter a list of values.
我不太确定这是从哪里来的。如果我查看开发人员工具中的 POST 数据,它似乎与我使用默认小部件并仅选择一名参与者完全相同。然而,似乎to_python()
ManyToManyField 的方法在处理此数据时存在问题。如果我启用“选择”小部件,至少不会创建用户对象。
我知道我可以通过从表单中排除参与者字段并自己定义它来解决这个问题,但如果仍然可以使用 ModelForm 的功能,那就更好了(毕竟,这只是一个小部件更改)。如果我知道的话,也许我可以以某种方式操纵传递的数据。
谁能告诉我问题到底是什么以及是否有好的方法来解决它?
提前致谢!
Edit
正如评论中所建议的:视图的(相关)代码。
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})