Duha22RUSМамыр 31, 2022, 10:23 Т.Ж.
Подсчет суммы баллов в Django
Создаются вопросы с выбором ответа, в модели решил создать к каждому выбору ответа определенный балл.. Теперь как мне сделать общий подсчет баллов в конце опроса, например по нажатию на кнопку, просто сумма баллов?
На форму выводятся все вопросы из бд
Что-то типо такого
Ну или может я совсем не по тому пути пошёл
#models.py class Question(models.Model): name = models.CharField('Вопрос', max_length=100) def __str__(self): return self.name class Meta: verbose_name = 'Вопрос' verbose_name_plural = 'Вопросы' class Option(models.Model): name = models.CharField('Вариант ответа', max_length=100) score = models.IntegerField('Количество баллов', default=0) option = models.ForeignKey(Question, on_delete=models.CASCADE) def __str__(self): return self.name class Meta: verbose_name = 'Поле для выбора' verbose_name_plural = 'Поля для выборов' class Complaint(models.Model): name = models.ForeignKey(to=Patient, on_delete=models.CASCADE, default=1) question = models.ForeignKey(to=Question, on_delete=models.CASCADE, default=1) option = models.ForeignKey(to=Option, on_delete=models.CASCADE, default=1) def __str__(self): return self.name class Meta: verbose_name = 'Анкетирование' verbose_name_plural = 'Анкетирования'
#forms.py class OptionForm(ModelForm): series = ModelChoiceField(label='Ответ', queryset=Option.objects.all()) pat = ModelChoiceField(label='Пациент', queryset=Patient.objects.order_by('name')) score = Option.objects.order_by('score') def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) self.fields['option'].queryset = Option.objects.none() class Meta: model = Complaint fields = ('__all__')
#views.py def add_complaint(request): error = '' if request.method == 'POST': form = OptionForm(request.POST) if form.is_valid(): form.save() return redirect('database_home') else: error = 'Ошибка добавления' compla = Question.objects.order_by('name') # score = Option.objects.order_by('score') # ball = Option.objects.filter(option_id=score) form = OptionForm() data = {'form': form, 'error': error, 'compla': compla} return render(request, 'database/add_complaint.html', data)
Рекомендуем хостинг TIMEWEB
Стабильный хостинг, на котором располагается социальная сеть EVILEG. Для проектов на Django рекомендуем VDS хостинг.Ол саған ұнайды ма? Әлеуметтік желілерде бөлісіңіз!
Пікірлер
m
- molni99
- Қаз. 26, 2024, 11:37 Т.Ж.
C++ - Тест 004. Указатели, Массивы и Циклы
- Нәтиже:80ұпай,
- Бағалау ұпайлары4
m
- molni99
- Қаз. 26, 2024, 11:29 Т.Ж.
C++ - Тест 004. Указатели, Массивы и Циклы
- Нәтиже:20ұпай,
- Бағалау ұпайлары-10
Соңғы пікірлер
QML - 020-сабақ. Qt Creator бағдарламасында Android манифестімен жұмысты бастау PMID 34322115 Free PMC article pastillas priligy en mexico
QMYSQL драйверін құру (MariaDB) Windows 10 x64 QT 5.13.0 Mingw73_64 amazon priligy Conclusion This is the first study of the adverse effects of quetiapine ingestion by children under 7 years of age
ТОБЖ – Сабақ 002. Оптикалық талшық және оның түрлері can you buy priligy Uric acid reduction rectifies prehypertension in obese adolescents
Audiere кітапханасымен mp3 файлдарын ашу Cook meat all the way through priligy otc Note stages 2 3 AKI here exclude patients on dialysis, which are shown in a separate bar graph
Qt/C++ - 017-сабақ. QGraphicsScene немесе Qt тілінде графикамен жұмыс істеу жолы Sort of the world congress on only the fluid seen attached to conceive where to buy priligy in malaysia Depressive symptoms have been associated with digoxin in small trials and case …
Енді форумда талқылаңыз
добавить qlineseries в функции The information provided in Dosage Posology and method of administration of Tamoxifen Actavis is based on data of another medicine with exactly the same composition as the Tamoxifen Actavis …
IscanderCheҚар. 1, 2024, 1:43 Т.Ж.
Машина тьюринга // Начальное состояние 0 0, ,<,1 // Переход в состояние 1 при пустом символе 0,0,>,0 // Остаемся в состоянии 0, двигаясь вправо при встрече 0 0,1,>…
ИМ
Реализация навигации по разделам Спасибо Евгений!
Игорь МаксимовҚаз. 3, 2024, 2:05 Т.Қ.
при создании qml проекта Kits есть но недоступны для выбора Поставил Qt Creator 11.0.2. Qt 6.4.3 При создании проекта Qml не могу выбрать Kits, они все недоступны, хотя настроены и при создании обычного Qt Widget приложения их можно выбрать. В чем может …
1) я бы рекомендовал убрать default для ForeignKey - это не безопасно
2) форма не совсем понятна (но я хз - не знаю задачи)
3) View, как мне кажется стоит переписать на что-то похожее на
ошибки, если они выявятся на этапе form.is_valid можно обработать в шаблоне через https://docs.djangoproject.com/en/4.0/ref/forms/api/#django.forms.Form.add_error . они будут информативнее
по поводу основного вопроса:
https://docs.djangoproject.com/en/4.0/topics/db/aggregation/
https://docs.djangoproject.com/en/4.0/ref/models/querysets/#sum
Я не пойму, почему-то я пытаюсь вернуть значения score модели Option.. но он мне возвращает просто имена всех объектов.. тоесть в вопросе на первом скрине видно, что я вводил баллы 4, 0, 0.. а он мне возвращает имена объектов, я не пойму, ка кне просто из бд вывести эти числа, уже столько всего перечитал, пробовал разные способы, никак не пойму(
1) покажите шаблон
2) я не могу понять, что должно отображаться в 3 колонке - баллы за ответ, написанный в 1 колонке или что-то еще?
я бы предложил сделать подругому - разделить логику формирования информации и форму. форму лучше сделать через FormSet
тогда логика будет примерно такая
страница со списком пациентов и ссылкой на форму добавления пацента -> страница пациента с вопросами, ответами, баллами за ответ и суммой баллов + ссылка на форму для заполнения/изменения ответов
если есть код на github, киньте ссылку, я могу сделать PR с тем, что я имею в виду
https://github.com/Duha22RUS/drf4
Вообще в идеале чтобы показывал баллы в зависимости от выбранного ответа)
Третью колонку я вывожу для того, чтобы видеть, что мне возвращается именно баллы. Т.к. сейчас нет смысла писать функцию по подсчету суммы, потому что в queryset возвращает имена объектов, а не значения Integer, хотябы кортеж вывести (4,0,0) типо того.. От этого уже идти к тому, что при выборе ответа начисляется определенное кол-во баллов, чтобы написать функцию суммы баллов по всем ответам на вопросы.. Я даже пытался возвращать в модели int (self) self.score, но это не помогло.. хотя не совсем пойму как обратиться, ведь у меня модель Option где переменная score.. передается в другую модель через ForeignKey
рекомендации по репозитрию:
1) использовать poetry для упраления зависимостями (или хотябы pip freeze)
2) добавить .gitignore и добавить туда папку .idea
3) у вас то английский, то русский текст по коду. я бы порекомендовал писать только на английском, а для русского использовать переводы Django
4) избавиться от city_dropdown_list_options.html - правильнее это поместить в форму
5) сделать один шаблон для форм - шаблоны login и register - одинаковые, кроме текста в кнопке. правильнее было бы передавать его из view через контекст
6) сделать заполнение анкеты через ModelFormSet
7) тут у вас не передается id пациента. непонятно, к кому это будет относиться.
8) тут в кнопке нет ссылки
9) тут правильнее это поле назвать patient. name - всетаки больше подходит для CharField
10) тут я бы назвал поле "Национальность", а не "нация". и ChoiceNation - сделал бы в единственном числе.
11) тут название поля, по-моему, не верное. правильнее было бы назвать его question. всетаки вариант ответа ссылается на вопрос, а не на вариант ответа.
12) в модели Complient лучше убрать default. получается, что все они всегда будут ссылаться на первый объект. я не думаю, что такое поведение - то, что вам нужно
мелкие замечания:
/
/templates/
/. чтобы было drf4/amscsait/amscapp/templates/amscapp/
- если используется "date_of_birth", то правильнее было бы поле с датой регистрации назвать "date_of_registration". или наоборот "date_of_birth" -> "birth_date"
- в полях с nation не обязательно делать длину 10 - в бд будут храниться коды (RU, UA, GE, ...)
- хорошей практикой было бы для шаблонов делать путь
я бы делал так:
сделал бы 2 страницы: patient_info.html, куда в контекст передавал бы все Complaint, относящиеся к пациенту (если они есть, иначе - сообщение типа "Анкетирование еще не проводилось"). если ответы есть - показывать кнопку "изменить анекту", иначе - кнопку "провести анкетирование".
если вернуться к самому первому вопросу - тут у вас в поле score передаются вообще все ответы, при этом это - не поле.
Я чуть позже сделаю PR
drf4-master_updated.zip
Спасибо большое)
Я сделал на скорую руку (часа за полтора), так что верстка и прочее - могут быть кривыми, но за python код я уверен.
я буду рад, если вы обратите внимание на практики, которые я там использовал и которые указал выше
если будут вопросы по тому, как что работает - задавайте
хорошо