Django ValueError将用户添加到userteam

2024-09-29 21:20:32 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在创建一个Django表单,您可以在其中向UserTeam(下面的UserTeams模型)添加一个用户。“invite”页面(下面)查询团队模型以获取当前团队的id,然后将其分配给“teamID”,因此您只能将用户添加到当前团队(我已禁用此字段,因此用户无法更改团队)然后用户选择要添加的用户,并提交表单。我正在尝试使用球队“凯特FC”,并添加球员'史蒂文'。但是,当我提交表单时,出现以下错误:

ValueError位于/teams/1/invite/

无法分配“'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']

Tags: 用户formid表单onmodelsrequest团队
1条回答
网友
1楼 · 发布于 2024-09-29 21:20:32

teamID是外键,因此应该使用model choice字段而不是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()

相关问题 更多 >

    热门问题