2016-01-07 2 views
0

Так что я пытаюсь создать скрипт, который задал бы пользователям несколько вопросов и на основе ответов, которые они выбрали, выполнить действие. Я новичок в Django, так что я до сих пор не уверен в том, как она полностью работает, и поэтому я основывая свой код отключения учебника найти на их сайте (пока я не получить лучшее понимание) https://docs.djangoproject.com/en/1.9/intro/tutorial01/Django 1.9 read value from request.POST

модели .py

@python_2_unicode_compatible 
class Question(models.Model): 
    question_text = models.CharField(max_length=300) 
    def __str__(self): 
     return self.question_text 

@python_2_unicode_compatible 
class Option(models.Model): 
    question = models.ForeignKey(Question, on_delete=models.CASCADE) 
    option_text = models.CharField(max_length=400) 
    def __str__(self): 
     return self.option_text 

views.py

def select(request, question_id): 
    question = get_object_or_404(Question, pk=question_id) 
    try: 
     selected_option = question.option_set.get(pk=request.POST['option']) 
    except (KeyError, Option.DoesNotExist): 
     return render(request, 'awsservers/detail.html', { 
     'question':question, 
     'error_message': "You did not select an option.", 
     }) 
    if selected_option: 
     # run code here 
     return HttpResponseRedirect(reverse('awsservers:extra', args=(question.id,))) 

detail.html

<h2>{{ question.question_text }}</h2> 

<form action="{% url 'awsservers:select' question.id %}" method="post"> 
{% csrf_token %} 
{% for option in question.option_set.all %} 
    <input type = "radio" name = "option" id = "option{{ forloop.counter }}" value = "{{ option.id }}" /> 
    <label for = "option{{ forloop.counter }}">{{ option.option_text }}</label><br /> 
{% endfor %} 
<br> 
<input type="submit" value="Select" /> 
</form> 

<a href="{% url 'awsservers:index' %}">Go Back</a> 

Я застрял в views.py. Я хотел бы прочитать значение selected_option, чтобы я мог выполнить требуемое действие на основе выбранного.

if selected_option == 'value': 
    perform action 
elif selected_option == 'value2': 
    perform other action 
+0

Я не понимаю, какие ошибки вы столкнулись. Не можете ли вы просто использовать 'selected_option'? или 'selected_option.option_text' – AbdealiJK

+0

извините, если я не объяснил вопрос правильно. к моему пониманию - когда пользователь выбирает параметр, он сохраняется в «selected_option». Я пытаюсь прочитать, какой вариант они выбрали, и я также не уверен, в каком формате он хранится в «selected_option», но, глядя на html-код, кажется, что идентификатор опции хранится в переменной, поэтому я хотел бы прочитать переменную и проверить, выбрал ли пользователь вариант 1, затем выполнить действие. –

ответ

0

В настоящее время, selected_option является объектом, так что использование if selected_option == 'value' не очень полезно. С другой стороны, вы можете сравнить selected_option «s атрибуты произвольных вещей, таких как числа и строки, например:

if selected_option.id == 1: return True # Will return True if the option chosen has an ID of 1 

ИЛИ

if selected_option.option_text == 'SOME OPTION TEXT': return True # Will return True if the option chosen matches the option text I compared it to 
+0

это сработало! Спасибо :) –