Уведомления

Группа в Telegram: @pythonsu

#1 Июль 23, 2015 22:57:13

dvasya
Зарегистрирован: 2015-07-23
Сообщения: 2
Репутация: +  0  -
Профиль   Отправить e-mail  

Применение RadioBtn вместо Dropdown

Добрый день!
Подскажите, как правильно решить следующую задачу.
Делаю опросник вот примерная структура БД (я пони здесь не использовал) https://editor.ponyorm.com/user/dvasya/Polls
Как сделать форму так чтоб форма отображала варианты ответов для вопросов в радио-батн
И при отправке то что выбрал пользователь сохранялось в таблицу UserAnswer с флагом True.
Модель:

from django.db import models
from django.contrib.auth.models import User
# Списки Вопросов
class Questions(models.Model):
    id = models.AutoField(primary_key=True)
    title = models.CharField(max_length=255, null=False, blank=True)
    active = models.BooleanField()
    def isVote(self, user_id):
        if self.useranswer_set.filter(vote=True, user=user_id).count() > 0:
            return True
        else:
            return False
    def get_answers(self):
        return self.answers_set.all()
    class Meta:
        verbose_name = 'Вопросы'
        verbose_name_plural = 'Вопросы'
    def __str__(self):
        return self.title
# Варианты ответов на вопрос
class Answers(models.Model):
    id = models.AutoField(primary_key=True)
    questions = models.ForeignKey(Questions, unique=False, null=False)
    answer_name = models.CharField(max_length=255, null=False, blank=True)
 
    def _get_questions_name(self):
        return self.questions.title
    question_name = property(_get_questions_name)
    class Meta:
        verbose_name = 'Варианты ответов'
        verbose_name_plural = 'Варианты ответов'
    def __str__(self):
        return self.questions.title + ' ' + self.answer_name
# Ответы пользователей
class UserAnswer(models.Model):
    id = models.AutoField(primary_key=True)
    user = models.ForeignKey(User, unique=False)
    questions = models.ForeignKey(Questions, unique=False, null=False)
    answers = models.ForeignKey(Answers, unique=False, null=False)
    timestamp = models.DateTimeField(auto_now_add=True, auto_now=True)
    vote = models.BooleanField()
    def _get_question_name(self):
        return self.answers.questions.title
    question_name = property(_get_question_name)
    class Meta:
        verbose_name = 'Ответы пользователей'
        verbose_name_plural = 'Ответы пользователей'
    def __str__(self):
        return '%s %s %s' % (self.answers.questions.title, self.user.get_full_name(), self.answers.answer_name)

View

def polls(request):
    questions_data = Questions.objects.all()
    answers_data = Answers.objects.all()
    return render_to_response("dvpolls/polls.html", RequestContext(request, locals()))

для отображения я сделал так но хотелось бы что это было сделано через форму
{% extends 'base.html' %}
{% load i18n %}
{% block content %}
     {% for quest_item in questions_data %}
        <form class="post">
            <h2 class="title">
                {{ quest_item.title }}
            </h2>
            <div class="story">
                {% for answ_item in quest_item.get_answers %}
                    <p>
                        <input type="radio" name = "answ_radio" value={{ answ_item.id }}> {{ answ_item.answer_name }}
                    </p>
                {% endfor %}
            </div>
            <div class="meta">
                <div class="btn-group" role="group">
                    <button type="submit" class="btn btn-default">Отправить</button>
                </div>
            </div>
            </br>
        </form>
    {% endfor %}
{% endblock %}

Отредактировано dvasya (Июль 23, 2015 23:11:06)

Офлайн

#2 Июль 24, 2015 00:08:38

dvasya
Зарегистрирован: 2015-07-23
Сообщения: 2
Репутация: +  0  -
Профиль   Отправить e-mail  

Применение RadioBtn вместо Dropdown

Все разобрался….. Можно сделать например так:

 answers = forms.ChoiceField(choices=[(c.id, c.answer_name) for c in Answers.objects.all()], widget=forms.RadioSelect)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version