在 Django 应用程序中,我有一个模型 Bet,其中包含与 Django 的 User 模型的 ManyToMany 关系:
class Bet(models.Model):
...
participants = models.ManyToManyField(User)
用户应该能够使用表格开始新的投注。到目前为止,投注只有两名参与者,其中一名是自己创建投注的用户。这意味着在新投注的表格中,您必须准确选择一位参与者。保存表单数据后,投注创建者被添加为参与者。
我正在为我使用 ModelForm NewBetForm
:
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的方法似乎对这些数据有问题。如果我启用 Select 小部件,至少没有创建用户对象。
我知道我可以通过从表单中排除参与者字段并自己定义它来解决这个问题,但是如果仍然可以使用 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})