微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Django:将会话信息传递给下一个模板并查看

如何解决Django:将会话信息传递给下一个模板并查看

我正在尝试建立一个小网站,用户可以在其中设置锦标赛,然后邀请玩家参加他们的锦标赛。

这些是我的锦标赛和邀请模型:

class Tournament(models.Model):
    tourney_name = models.CharField(max_length=200,null=False,blank=False) 
    event = models.ForeignKey(NewsArticle,on_delete=models.DO_nothing,related_name='tourneys')
    host_user = models.ForeignKey(get_user_model(),on_delete=models.CASCADE)
    # player_count_limit = models.PositiveIntegerField(validators=[MaxValueValidator(100)])
    player_join_deadline = models.DateField()
    fantasy_team_size = models.PositiveIntegerField(validators=[MinValueValidator(5),MaxValueValidator(15)])
    created_dt = models.DateTimeField(auto_Now_add=True)
    last_modified_dt = models.DateTimeField(auto_Now=True)

    def __str__(self):
        return self.tourney_name

    def get_absolute_url(self):
        return reverse('home')

class Invite(models.Model):
    name = models.CharField(max_length=200,blank=True,null=True)
    email = models.CharField(max_length=320,blank=False,validators=[EmailValidator],)
    invited_by = models.ForeignKey(get_user_model(),on_delete=models.DO_nothing)
    invited_for = models.ForeignKey(Tournament,on_delete=models.DO_nothing)
    created_dt = models.DateTimeField(auto_Now_add=True)

    def __str__(self):
        return self.email

    def get_absolute_url(self):
        return reverse('home')

然后这些是我的观点:

class MaketourneyView(CreateView):
    template_name = 'make_tourney.html'
    model = Tournament
    form_class = MaketourneyForm    

    def form_valid(self,form):
        form.instance.host_user = self.request.user
        form.save()
        return super(MaketourneyView,self).form_valid(form)

    def get_success_url(self):
        return reverse('invite_players')
        #return reverse('invite_players',kwargs={'tourney_id': self.object.id})

    def update_session(self):
        tourneyobj = self.get_object()
        self.request.session['tourney_id'] = tourneyobj.id
        return self.request.session['tourney_id']


class InvitePlayersView(CreateView):
    template_name = 'invite_players.html'
    model = Invite
    form_class = InvitePlayerForm

    def form_valid(self,form):
        tourney_id = self.request.session['tourney_id']
        form.instance.invited_for = Tournament.objects.filter(id=tourney_id).get()
        form.instance.invited_by = self.request.user
        form.save()
        return super(InvitePlayersView,self).form_valid(form)

我做错了什么,因为没有在 form.instance.invited_for 上设置 tourney_id;相反,当我点击提交时,我收到 Django 错误提示“KeyError at /tourney/inviteplayers/ 'tourney_id'"

非常感谢任何帮助!

解决方法

针对您的问题尝试以下操作。

如果您在文档中阅读了有关它的更多信息,您可以像下面一样访问当前实例。

class InvitePlayersView(CreateView):
    template_name = 'invite_players.html'
    model = Invite
    form_class = InvitePlayerForm

    def form_valid(self,form):
        tourney_id = form.instance.update_session()
        form.instance.invited_for = Tournament.objects.filter(id=tourney_id).get()
        form.instance.invited_by = self.request.user
        form.save()
        return super(InvitePlayersView,self).form_valid(form)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。