На основе выбора модели отображать результат в шаблоне django

на основе поля множественного выбора я хочу показать результат в шаблоне но я понятия не имею как это сделать как вы можете видеть в этой модели я даю выбор обеда ученикам на основе выбора обеда я хочу показать результат но это не работает например если он выберет сэндвич то результат после отправки будет готов сэндвич и тоже самое для других

from multiselectfield import MultiSelectField
class student(models.Model):
    lunch_choice = [ 
        ('Sandwich', 'Sandwich'),
        ('Salad', 'Salad'),
        ('omlete', 'omlete'),
    ]
    name = models.CharField(max_length=70, blank=False)
    classs =  models.CharField(max_length70, blank=True)
    lunch =  multiselectfield(choices=lunch_choice, blank=True)

    def __str__(self):
        return self.name

я попробовал в своем HTML

{% if student.classs %}
{% if student.lunch == 'Sandwich' %}
          <p> your sandwich will be ready</p>
{% endif %} 
{%endif%}

OP может создать модель для обедов (это позволит создавать новые обеды, редактировать и удалять). Затем в модели Student создайте обед с ManyToManyField, например

lunch = models.ManyToManyField(Lunch, blank=True)

Обратите внимание на использование blank=True для того, чтобы не требовать наличия поля в формах.

Тогда, когда вы создадите форму на основе этой модели, она создаст опыт, подобный тому, который есть в Django Admin, где можно выбрать несколько вариантов.

Затем можно показать его пользователю в шаблоне.


Если вам не нравится работа с формой и вы хотите сделать ее более удобной для пользователя, есть несколько статей, объясняющих это

Это происходит потому, что строка сравнивается с типом: type(aaa[0].lunch) <class 'multiselectfield.db.fields.MSFList'>. Вывел тип данных 'type(aaa[0].lunch)' первого значения из базы данных в представлении. Использовал stringformat:'s' для преобразования данных в строку в шаблоне. Здесь вы можете прочитать о преобразовании: conversion

трансформация тип:

замените 'samplesite' на имя вашего приложения.

urls.py

urlpatterns = [
   path("Test/", Test, name = 'Test'),
]

views.py

def Test(request):
    aaa = student.objects.all()
    print('type(aaa[0].lunch)', type(aaa[0].lunch))
    context = {'fff': aaa}

    return render(request, 'samplesite/lunch.html', context)

lunch.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="utf-8" />
</head>
<body>
    {% for aa in fff %}
    {% if  aa.lunch|stringformat:'s' == 'Sandwich' %}
   <p>{{aa.lunch}}</p>
    {% endif %}
    {% endfor %}
</body>
</html>

acc мне кажется, что нет такого способа, с помощью которого вы можете показать результат на основе выбранного варианта, потому что я также пытался использовать это и искал ответы в интернете, но не нашел ничего, и создатель этого репозитория также не отвечает, хотя я бы рекомендовал вам использовать модели many to many field Это позволит пользователю выбрать более одного варианта, как multiselectfield, как это

сначала создайте модели

class Lunch(models.Model):
    title = models.CharField(max_length=200)

    def __str__(self):
        return self.title

добавьте это в модели ученика

lunch =  models.ManyToManyField(Lunch, blank=True, related_name="lunch")

затем добавьте свой вариант в модель обеда

и вставьте его в ваш шаблон, чтобы показать результат на основе выбранной опции

{% if student.classs %}
{% for Lunch in student.lunch.all %}
{% if Lunch.title == 'Sandwich' %}
          <p> your sandwich will be ready</p>
{% endif %}
{% endfor %} 
{%endif%}

это будет работать

Вернуться на верх