【问题标题】:How to save button value to databse in django?如何在 django 中将按钮值保存到数据库中?
【发布时间】:2017-12-06 16:54:48
【问题描述】:

我正在尝试创建我的第一个 django 应用 - 体育预测游戏。
我希望用户使用 3 个按钮(图像)从三个可能的结果中进行选择,这些按钮(图像)将 3 个不同的值传递给 db:
1 - 主队获胜
0 - 平局
2 - 客队获胜

我可以在输入内容时使用表单保存数据,但是如何将这些按钮的值传递到我的数据库?

我的 game.html 上的代码:

{% csrf_token %}

{{ form }}
<input type="submit" value = 1>
<input type="submit" value = 0>
<input type="submit" value = 2> </form>

我的看法:

def game(request, Game_id):
    thisgame = get_object_or_404(Game, pk=Game_id)
    nextgame = int(thisgame.id)+1
    template = loader.get_template('polls/game.html')
    form = NewBetForm(request.POST or None)
    current_user = request.user

    allgames = Game.objects.all()
    betchoices = BetChoice.objects.all()

    context = { 'thisgame': thisgame,
                'nextgame': nextgame,
                'form': form,
                'current_user': current_user,
                'betchoices': betchoices,}

    if form.is_valid():
        bet = form.save(commit=False)
        bet.gameid = Game.objects.get(id=Game_id)
        bet.userid_id = current_user.id
        bet.save()
    else:
        print (form.errors)

还有我的表格:

class NewBetForm(forms.ModelForm):
    class Meta:
        model = GameBet
        fields = ['bet']

我得到的错误是Bet - this field is required

感谢您的所有想法!

【问题讨论】:

    标签: django django-forms


    【解决方案1】:

    您可以为它设置名称:

    <input type="submit" name="send1" value ="1">
    

    注意:你应该重视像value ="1"这样的部分

    views.py:

    if request.method == 'POST':
          if request.POST["send1"] == "1":
                //do some thing
          elif request.POST["send1"] == "2":
                 //do domthing
          else://request.POST["send1"] == "3"
                 //do something
    

    希望对你有帮助:)

    【讨论】:

    • 嗨@Snip77,谢谢你的回答。我需要 3 个按钮,所以我应该以不同的方式命名每个按钮吗?现在我得到了带有本地变量的MultiValueDictKeyError(repr(key))key - 'send1' self {'csrfmiddlewaretoken': code', 'send3': '3'}
    • 是的,你应该称它们为 diffrent。因为你想在服务器端检测按钮。调用然后像:1、2 和 3。在服务器端你需要知道单击了哪个名称的按钮。如果你有其他问题,告诉我,也许我可以回答:)
    • 我想我在这里仍然缺少一些东西。在这种方法中我需要"if form is valid()" 部分吗?现在我有以下但它什么都不做:if request.method == 'POST': if request.POST["bet"] == 1: if form.is_valid(): bet = form.save(commit=False) bet.gameid = Game.objects.get(id=Game_id) bet.userid_id = current_user.id bet.save() else: print (form.errors)
    • 如果你有默认的 django 登录或默认的 django 注册,你不需要使用 if form is valid() 但在其他情况下你需要它(最好使用).(当你添加 mor 字段来注册你也需要使用它:) )
    【解决方案2】:

    与任何其他类型的表单字段一样,提交按钮需要name 属性才能将任何数据发送到后端。从那里,您可以通过request.POST['whatever_the_name_is'] 获取它的值并将其分配给您新创建的对象 - 或者,如果您使用的名称已经是表单中的一个字段,它将被自动分配。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-12-01
      • 1970-01-01
      • 2017-05-13
      • 1970-01-01
      • 2016-08-26
      • 2021-12-26
      • 2015-06-21
      相关资源
      最近更新 更多