我正在创建一个 Django 表单,您可以在其中将用户添加到 UserTeam(下面的 UserTeams 模型)。'invite' 页面(如下)查询 Team 模型以获取当前团队的 id,然后将其分配给 'teamID',因此您只能将用户添加到当前团队。(我已禁用此字段,因此用户无法更改团队)然后用户选择他们想要添加的用户,并提交表单。我正在尝试使用“Kate FC”团队并添加玩家“steven”。但是,当我提交表单时,出现此错误:
/teams/1/invite/ 处的 ValueError
无法分配“'Kate FC'”:“UserTeams.teamID”必须是“Team”实例。
这个错误是什么意思??
class UserTeams(models.Model):
userID = models.ForeignKey(User,on_delete=models.CASCADE)
teamID = models.ForeignKey(Team,on_delete=models.CASCADE)
class Team(models.Model):
name = models.CharField(max_length=100)
venue = models.CharField(max_length=100)
countryID = models.ForeignKey(Countries, on_delete=models.CASCADE)
owner = models.ForeignKey(User)
def invite(request, teamID):
try:
query = Team.objects.get(id=teamID)
except:
raise Http404()
if request.method == 'POST':
form = InvitePlayerForm(request.POST or None, initial={'teamID': query})
if form.is_valid():
userteam = form.save(commit=False)
userteam.save()
return redirect('teammanager/teams.html')
else:
form = InvitePlayerForm(initial={'teamID': query})
query = Team.objects.get(id=teamID)
return render(request, 'teammanager/invite.html', {
"team": query,
"form": form
})
表格:
class InvitePlayerForm(forms.ModelForm):
teamID = forms.CharField(disabled=True)
class Meta:
model = UserTeams
fields = ['teamID','userID']
teamID
是外键,因此您应该使用模型选择字段而不是 CharField:
class InvitePlayerForm(forms.ModelForm):
teamID = forms.ModelChoiceField(queryset=Team.objects.all(), disabled=True)
...
或者您可以禁用__init__
方法中的字段。
class InvitePlayerForm(forms.ModelForm):
def __init__(self, *args, **kwargs):
super(InvitePlayerForm, self).__init__(*args, **kwargs)
self.fields['teamID'].disabled = True
...
或者,您可以将teamID
字段留在表单之外,并在保存表单时设置该值:
if form.is_valid():
userteam = form.save(commit=False)
userteam.teamID = query
userteam.save()
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句