在 Django 的外键中分配一个实例

Assign an Instance in a ForeingKey in Django

我以前遇到过这种错误,我可以修复它,但现在我不知道发生了什么,我该如何修复它?

我得到:

Cannot assign "u'2'": "ClosedBets.bet_user_a" must be a "Teams" instance.

我的模特:

class ClosedBets(models.Model):
    match = models.ForeignKey(Match2x1)
    user_a = models.ForeignKey(User,related_name="+")
    bet_user_a = models.ForeignKey(Teams,related_name="bet_user_a")
    user_b = models.ForeignKey(User)
    bet_user_b = models.ForeignKey(Teams,related_name='bet')

    def __unicode__(self):
        match = "%s VS %s"%(self.match.team_a,self.match.team_b)
        return match

我的看法:

 z = Bets.objects.filter(match_id=request.POST['match']).exclude(user=self.request.user).filter(~Q(bet_id=request.POST['team']),value=request.POST['valor'])
                bet = z.first()
                if bet:
                    print bet.match_id
                    print bet.user_id
                if z: #SI HAY Z
                    ClosedBets.objects.create(match_id=request.POST['match'],user_a=self.request.user,bet_user_a=request.POST['team'],user_b=bet.user_id,bet_user_b=bet.match_id)

matchbet_user_a 是外键,因此您不能将简单的 strings/integers 分配给这些字段。所以你必须从数据库中获取 FK 模型的实例并在 create() 调用中分配它们:

ClosedBets.objects.create(
                   match=Match2x1.objects.get(pk=request.POST['match']),
                   user_a=self.request.user,
                   bet_user_a=Teams.objects.get(pk=request.POST['team']),
                   user_b=bet.user_id,
                   bet_user_b=bet.match_id)

另请注意,ClosedBets 模型中的字段称为 match,但您尝试使用 match_id 字段创建实例。