2017-02-23 5 views
0

The Error Message get() nimmt keine Keyword-Argumente: Django Tutorial mit verschiedenen Modellen

Hier ist meine Glücksspiel-Ansicht in views.py

def gambling(request, profile_id): 
     Profile = get_object_or_404(profile, pk=profile_id) 
     coin = get_object_or_404(Coin, pk=profile_id) 
     try: 
      selected_choice = coin.Face.get(pk=request.POST['name']) 
     except (KeyError, Coin.DoesNotExist): 
      # Redisplay the question voting form. 
       return render(request, 'gamble/detail.html', { 
       'Profile': Profile, 
       'error_message': "You didn't select a choice.", 
      }) 
     else: 
      selected_choice.Face 
      selected_choice.save() 
     return HttpResponseRedirect(reverse('gamble:results', args=(profile.id,))) 

Hier ist die Form, in detail.html

{% if error_message %}<p><strong>{{ error_message }}</strong></p>{% endif %} 
<form action="{% url 'gamble:gambling' Profile.id %}" method="post"> 
{% csrf_token %} 
{% for choice in coin.Face %} 
    <input type="radio" name="choice" id="choice{{ forloop.counter }}" value="{{ choice.id }}" /> 
    <label for="choice{{ forloop.counter }}"> {{ choice }}</label><br /> 
{% endfor %} 

<input type="submit" value="flip" /> 
</form> 

Hier ist mein Code für die Modelle Profil und Münze in models.py

# Create your models here. 
class profile(models.Model): 
    name = models.CharField(max_length=120) 
    description = models.TextField(default='description default text') 
    def __unicode__(self): 
     return self.name 


class Coin(models.Model): 
    #choice = models.ForeignKey(BetAmount, on_delete=models.CASCADE) 
    choice_text = models.CharField(max_length=200, default="...") 
    flip = randint(0,1) 
    Heads =0 
    Tails =1 
    Face ={ 
    "Heads": Heads, 
    "Tails": Tails 
    } 

    def __str__(self): 
     return self.choice_text 
    def flipped(self): 
     return self.flip 

Ich bekomme den Fehler über .get(), obwohl ich den Formularnamen übergebe, ich bin mir nicht sicher, ob es mit dem Coin-Objekt selbst zu tun hat, Klarheit in der Sache würde helfen. Gibt es etwas, das mir im Coin-Modell fehlt, oder ist das Problem immer noch im Detail.html, habe ich Code so nah wie möglich an das Tutorial-Beispiel geschrieben.

+2

Veröffentlichen Sie die vollständige Fehlermeldung wörtlich. Umschreibe nicht. –

+0

Der Traceback wird * dir sagen, ob es mit dem Coin-Objekt zu tun hat. Veröffentliche es. –

Antwort

2

coin.Face ist ein dict, keine QuerySet:

Face = { 
    "Heads": Heads, 
    "Tails": Tails 
} 

Und die get Methode der dict-get(key[, default]) - ist in der Tat keine Keyword-Argumente, sondern nur ein key, und - optional - eine Standard-Rückkehr Wert, beide als Positionsargumente.

coin.Face.get('Head', coin.Heads) # for instance 
+0

Danke für die Klärung. Was soll ich tun, um das Gesicht aus dem POST-Formular zu bekommen? – timi95

+0

Angenommen, das Gesicht ist ein String ("Heads" oder "Tails") in "POST ['Face']', könnten Sie folgendes tun: 'selected_choice = coin.Face.get (request.POST ['Face'], coin.Heads) 'where – schwobaseggl

+0

Dies scheint in die Ausnahme zu gehen und gibt mir meine error_message. – timi95

Verwandte Themen