2017-02-23 12 views
0

The Error Message прибудет() не принимает никаких аргументов ключевых слов: Django учебник с различными моделями

Вот мой взгляд азартных игр в 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,))) 

Вот форма в 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> 

Вот мой код для профиля модели и монеты в 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 

Я продолжаю получать сообщение об ошибке .get(), хотя я передаю имя формы, я не уверен, связано ли это с самим объектом Coin, ясность в этом вопросе поможет. Есть ли что-то, что мне не хватает в модели монеты, или проблема еще в detail.html, я, кажется, написал код как можно ближе к учебному примеру.

+2

Опубликовать полное сообщение об ошибке verbatim. Не перефразируй. –

+0

Отслеживание будет * сказать * вам, связано ли это с объектом Coin. Отправьте его. –

ответ

2

coin.Face является dict, не QuerySet:

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

И get метода dict - get(key[, default]) - действительно не принимать какие-либо именованные аргументы, но только key, и - при необходимости - возврат по умолчанию значение, как в качестве позиционных аргументов.

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

Благодарим вас за разъяснение. Что мне делать, чтобы получить Face из формы POST? – timi95

+0

Предполагая, что лицо является строкой ('' Heads 'или' Tails'') в 'POST ['Face']', вы можете сделать: 'selected_choice = coin.Face.get (request.POST ['Face'], coin.Heads) 'где – schwobaseggl

+0

Это похоже на исключение и дает мне мою error_message. – timi95