繁体   English   中英

使用多对多字段保存Django表单集

[英]Saving Django formset with Many to Many Field

我正在构建一个带有表单集的小应用程序,该表单集使我可以输入许多游戏得分,每个得分都通过多对多字段链接到玩家。 我在将其正确保存时遇到各种错误。 基本代码。

模型

class Player(models.Model):
    name = models.CharField(max_length=30)

    def __unicode__(self):
            return self.name

class Score(models.Model):
    score = models.DecimalField(max_digits=4, decimal_places=0)
    turn = models.ForeignKey(Turn)
    players = models.ManyToManyField(Player)  

    def __unicode__(self):
            return self.score

然后将每个比分加入一个转弯,但我还没有显示出来。

表格

class NewScore(ModelForm):

    class Meta:
        model = Score
        fields = ('score', 'players',)

View.py

def newscore(request):

NewScoreFormSet = formset_factory(NewScore, extra=2)  

if request.method == 'POST':

    formset = NewScoreFormSet(request.POST)

    if formset.is_valid():

        t = Turn.objects.latest('id')

        for form in formset:

            p = form.cleaned_data.get('players')

            scoreSave = form.save(commit=False)
            scoreSave.turn = t
            scoreSave.save()
            scoreSave.players.add(p)


    else:
        print 'Formset not OK'

    return render(request, 'scorer/game.html',
                {})

else:

    formset = NewScoreFormSet()

    return render(request, 'scorer/game.html',
                {'formset': formset,})

问题似乎与如何通过多个字段保存播放器有关,在此当前设置中,我收到错误消息

TypeError:int()参数必须是字符串或数字,而不是“ QuerySet”

我也尝试过删除线

scoreSave.players.add(p)

但这根本无法挽救玩家。 只是比分和转弯。

用于关联多对多关系中的实例的add()方法采用一个或多个单独的模型实例。 您不能传递球员的完整列表/查询集,但可以一个一个地添加他们:

for player in p:
    scoreSave.players.add(player)

当然,这很冗长,因此您可以使用python的语法糖对所有实例一次调用add()

scoreSave.players.add(*p) # same as scoreSave.players.add(p[0], p[1], ...)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM