2017-12-06 1 views
1

Ich versuche, meine erste Django App - Sportvorhersagen Spiel zu erstellen.
ich Benutzer möchte von drei möglichen Ergebnissen wählen mit 3 Tasten (Bilder), die 3 verschiedene Werte an die DB übergeben:
1 - Heimmannschaft gewinnt
0-
Wie speichert man den Button-Wert in der Datenbank im Django?

Mannschaft gewinnt -
2 Unentschieden Ich kann Daten mithilfe von Formularen speichern, wenn ich etwas in sie einfüge, aber Wie übergebe ich den Wert dieser Schaltflächen an meine Datenbank?

Code auf meinem game.html:

{% csrf_token %} 

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

und meine Ansicht:

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) 

und meine Form:

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

und die Fehler, die ich bekommen ist Bet - this field is required

Vielen Dank für alle Ideen!

Antwort

1

können Sie Namen gesetzt für sie mag:

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

Hinweis:

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 

Ich hoffe, es wird Ihnen helfen: Sie sollten Teil wie value ="1"

und in views.py Wert :)

+0

Hallo @ Snip77, danke für y unsere Antwort. Ich brauche 3 Knöpfe, also sollte ich jeden anders benennen? Im Moment habe ich 'MultiValueDictKeyError (repr (key))' mit lokalen Vars: Taste '\t - 'Send1' Selbst \t { 'csrfmiddlewaretoken': Code‘, 'SEND3': '3'} ' – Patr01

+1

ja, sollten Sie rufen Sie sie diffrent.beacuse Sie wollen Knopf im Server side.call dann wie: 1, 2 und 3.in Server-Seite erkennen, müssen Sie Knopf mit welchem ​​Namen clicked kennen. wenn Sie ein anderes Problem haben, sagen Sie mir, vielleicht kann ich Antwort :) –

+0

Ich glaube, mir fehlt hier noch etwas. Brauche ich den "if form is valid()" - Teil in diesem Ansatz? Im Moment habe ich die folgenden, aber es tut nichts: 'wenn request.method == 'POST': \t \t wenn request.POST [ "bet"] == 1: \t \t \t wenn form.is_valid() : \t \t \t \t Wette = form.save (Commit = false) \t \t \t \t bet.gameid = Game.objects.erhalten (id = Game_id) \t \t \t \t bet.userid_id = current_user.id \t \t \t \t bet.save() \t \t \t anderes: \t \t \t \t print (form.errors) ' – Patr01

0

Wie bei jeder anderen Art von Formularfeld benötigt eine Übermittlungsschaltfläche ein Attribut name, bevor Daten an das Back-End gesendet werden. Von dort können Sie den Wert einfach über request.POST['whatever_the_name_is'] abholen und Ihrem neu angelegten Objekt zuweisen - oder, wenn Sie den Namen verwenden, der bereits ein Feld im Formular ist, wird es automatisch zugewiesen.

Verwandte Themen