我正在开发我的第一个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}}从模板传递给视图
答案 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