[英]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.