如何从显示列表的页面发布具有特定ID的值?

时间:2018-01-04 11:19:07

标签: django django-forms

我正在开发我的第一个django项目,这是一个体育博彩应用程序。我的模特是:

class Game(models.Model):
    home_team = models.CharField(max_length=100)
    away_team = models.CharField(max_length=100)


class GameBet(models.Model):
    gameid = models.ForeignKey(Game)
    bet = models.IntegerField(default=None) #values: 1(home win), 0 (draw), 2 (away win)
    userid = models.ForeignKey(User)

当我在网址中传递gameid时,我可以使用单个游戏视图保存用户投注,但这不是很有效。

我创建了一个简单的页面,其中包含每场比赛1个表单的游戏列表(最后我希望通过一个按钮发送所有投注):

{% for game in games %}
{{ game.id }} | {{ game.home_team }} | {{ game.away_team }} | <form method="post"> {% csrf_token %} {{ form }}   <input type="submit" value="bet" /> </form>  <br>  {% endfor %}

我的表格是:

if request.method == 'POST':
        #if request.POST["bet"] == 'bet':

        form = NewBetForm(request.POST)
        if form.is_valid():
            bet = form.save(commit=False)
            bet.gameid = [r.id for r in owing_games] #it gives me a list and ValueError Cannot assign "[10, 11, 12]": "GameBet.gameid" must be a "Game" instance.
            bet.userid_id = current_user.id
            bet.bet = form.value()
            bet.save()

在这种情况下,如何通过单个game.id?

编辑: 我想我可以使用request.POST.get(某事),但我不知道如何将{{game.id}}从模板传递给视图

1 个答案:

答案 0 :(得分:1)

创建一个值为game.id的隐藏输入字段。

示例

<input type='hidden' value='{{ game.id }}' name='game_id'>

将上述html代码放在form块中。现在,您可以将view中的值视为request.POST['game_id']

并且,如果您想为多个游戏ID放置相同的赌注,则循环游戏ID,从数据库中检索Game实例并将每个新的GameBet实例gameid指定为检索到Game个实例。

单一游戏ID示例

game_id = request.POST['game_id']
if request.method == 'POST':
    # rest of the code
    if form.is_valid():
        bet.game_id = Game.objects.get(id=game_id)

多个游戏ID示例

game_ids = request.POST['game_ids']
if request.method == 'POST':
    for game_id in game_ids:
        bet = form.save(commit=False)
        bet.game_id = Game.objects.get(id=game_id)
        bet.save()
    # return response after loop