我是Python / Django的新手,非常感谢我能得到的任何帮助!
我正在尝试接受多个表单字段,并且无法找到一个很好的干净方法。我的代码试图为每个实例接受一个外键选择(团队)和一个数字(下注大小)。
我最终创建了迭代request.POST.items的代码,以确定每个团队属于哪个游戏,哪个工作正常,但是我无法将Bet尺寸的输入作为“值”字段已经分配给每个游戏。
我使用模型表单而不是我选择的方法进行了辩论,但找不到一种很好的方法来接收外键数据。
您如何建议更改代码以接受投注大小字段?是否有其他方法可以使用您建议的模型表单进行处理?
请在下面找到我的代码!
提前致谢
Views.py:
def pick_game(request):
# Check what kind of request this is? GET/POST?
if request.method == 'GET':
game_list = Game.objects.order_by('-picks')
# form = PickGameForm()
page_variables = {
"game_list": game_list, 'form':form
}
return render(request, 'social/pickGame.html', page_variables)
else:
for key, value in request.POST.items():
print(key, value)
if "choice" in key:
game_id = int(key.split("_")[1])
team_id = int(value)
game = Game.objects.get(pk=game_id)
team = Team.objects.get(pk=team_id)
PlayerPick.objects.create(
player_profile=request.user.playerprofile,
game=game,
team=team,
bet_size=bet_size
)
else:
bet_size = request.POST.get('Bet')
pickGame.html:
<h1>Games</h1>
<form method="post">
{% csrf_token %}
{% for game in game_list %}
<h2>Game {{ game.number }}</h2>
<p><input type="radio" name="{{ game.pk }}" value="{{ game.team1.pk }}"> {{ game.team1.name }}</p>
<p><input type="radio" name="{{ game.pk }}" value="{{ game.team2.pk }}"> {{ game.team2.name }}</p>
<p><input type="number" name="Bet"> How much Money? </p>
{% endfor %}
<hr>
<button type="submit">Submit</button>
</form>
PlayerPick模型:
class PlayerPick(models.Model):
player_profile = models.ForeignKey('PlayerProfile')
team = models.ForeignKey('Team')
game = models.ForeignKey('Game')
bet_size = models.IntegerField(default=0, blank=True)
correct = models.BooleanField(default=False, blank=True)
pick_time = models.DateTimeField(auto_now_add=True)
答案 0 :(得分:0)
我认为您的手动方法非常好,您所要做的就是找到一种方法来为每个游戏唯一识别Bet字段。你可以在你的html中使用它:
#loader {
position: absolute;
left: 50%;
top: 50%;
z-index: 1;
width: 150px;
height: 150px;
margin: -75px 0 0 -75px;
border: 16px solid #f3f3f3;
border-radius: 50%;
border-top: 16px solid #3498db;
width: 120px;
height: 120px;
-webkit-animation: spin 2s linear infinite;
animation: spin 2s linear infinite;
}
@-webkit-keyframes spin {
0% { -webkit-transform: rotate(0deg); }
100% { -webkit-transform: rotate(360deg); }
}
@keyframes spin {
0% { transform: rotate(0deg); }
100% { transform: rotate(360deg); }
}
/* Add animation to "page content" */
.animate-bottom {
position: relative;
-webkit-animation-name: animatebottom;
-webkit-animation-duration: 1s;
animation-name: animatebottom;
animation-duration: 1s
}
@-webkit-keyframes animatebottom {
from { bottom:-100px; opacity:0 }
to { bottom:0px; opacity:1 }
}
@keyframes animatebottom {
from{ bottom:-100px; opacity:0 }
to{ bottom:0; opacity:1 }
}
然后在创建PlayerPick对象之前获取视图中的值:
<input type="number" name="{{game.pk}}-Bet">
如果您想使用Django Forms,您还可以在创建表单时使用bet_size = request.POST.get('%s-Bet' % game.pk)
参数来模仿此行为。您必须为未绑定和绑定的表单定义此项,以便可以识别带前缀的字段名称:
prefix