Выбор радиоэлемента в представлении редактирования Шаблон Django

Я делаю представление редактирования и хочу, чтобы при получении результатов выбирались некоторые радиополя. Моя проблема в том, что я не могу сделать так, чтобы мои значения в forloop и значения из базы данных корректно сравнивались. Позвольте мне быть более ясным с некоторым кодом. У меня есть списки с именами mission_entry и gradings. mission_entry имеет некоторые оценки внутри него, голос от 1 до 5 в каждом значении списка.

views.py

    mission_entry = MissionEntry.objects.filter(log_entry_id=log_entry_id)
    gradings = range(1,6)

models.py

 GRADING_VALUE = (
    ('1', '1'),
    ('2', '2'),
    ('3', '3'),
    ('4', '4'),
    ('5', '5'),
)
    class MissionEntry(models.Model):
        student = models.ForeignKey(
            Student, on_delete=models.DO_NOTHING, blank=True, null=True)
        mission = models.ForeignKey(
            Mission, on_delete=models.DO_NOTHING, null=True, blank=True)
        log_entry = models.ForeignKey(
            LogEntry, on_delete=models.CASCADE, blank=True, null=True)
        learning_objective = models.ForeignKey(
            LearningObjective, on_delete=models.DO_NOTHING, blank=True, null=True)
        grade = models.CharField(
            max_length=10, choices=GRADING_VALUE, blank=True, null=True)
        comment = models.TextField(null=True, blank=True)
        created_at = models.DateTimeField(auto_now_add=True)
        updated_at = models.DateTimeField(auto_now=True)

шаблон

 {% for lo in mission_entry %}
      <tr>
        <td id='learning_obj'>{{lo.learning_objective.name}}</td>
        {% for grade in gradings %}
          <td>
            <input class="form-check {{grade}}" {% if lo.grade == grade %}selected{% endif %} type="radio" value="{{grade}}" name="grade{{lo.learning_objective.name}}" id="grade" required/>
          </td>
        {% endfor %}
        <td><input type="text" class="form-control" name="note" id='note' value="{{lo.comment}}"></td>
      </tr> 
      {% endfor %}

Я знаю, что {% if lo.grade == grade %}selected{% endif %} - это неправильный кусок кода. В основном я сравниваю в шаблоне строку с целым числом, но я не могу понять, как манипулировать моими переменными для их сравнения. Есть предложения?

Как вы заметили, вы сравниваете строки с целыми числами, поэтому это не работает. Вы можете изменить gradings на строки вместо целых чисел:

gradings = map(str, range(1, 6))

Where map преобразует каждый элемент в итерабле в строку.

В качестве альтернативы вы можете изменить поле grade на IntegerField вместо CharField. Это будет более уместно, если вы собираетесь хранить только целочисленные значения, и будет лучше подходить для таких вещей, как упорядочивание элементов по grade в будущем.

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