Получить значение / состояние флажка для каждой строки в Django, когда POST - PullRequest
0 голосов
/ 26 июня 2019

Я хочу отобразить таблицу с:

  • в строках: дата каждого дня недели (рассчитайте в my views.py)
  • по столбцам: выбор пользователя.

Я могу получить значение из моделей и отобразить его: https://i.imgur.com/TyvI0DH.png

Но когда я смотрю исходный код на странице, я вижу https://i.imgur.com/wY0QC62l.png

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

  • Я пытаюсь использовать набор форм, но не могу передать начальное значение в шаблон "selection_template.html" (я пытаюсь использовать приведенный ниже пример, но он не работает, потому что мне нужно отобразить выбор пользователя в зависимости от даты дня недели .
formset = ArticleFormSet(initial=[{'title': "Form %d" % (i+1),
                                   'pub_date': datetime.date.today()} for i in range(10)])
  • Я знаю, как отобразить мульти-форму, используя formset, но не знаю, как передать значение в шаблон.

models.py

class MealSelection(models.Model):

    user = models.ForeignKey('User', on_delete=models.CASCADE)
    date = models.DateField(auto_now_add=True)
    salad = models.BooleanField(default=False)
    meal = models.BooleanField(default=False)
    sandwich = models.BooleanField(default=False)

forms.py

class GetUserMeal(forms.ModelForm):
    class Meta:
        model = MealSelection
        fields = ['meal', 'salad', 'sandwich']
        widget = forms.CheckboxInput(
            attrs={
                'name': 'choices'
            }
        )

views.py

for day in weekDay:
        try:
            userSelection  = MealSelection.objects.get(user=u1,date=startWeek + datetime.timedelta(days=daysCount))
            userSelection = {'meal':userSelection.meal, 'salad':userSelection.salad, 'sandwich':userSelection.sandwich}
        except:
            userSelection = {'meal':False, 'salad':False, 'sandwich':False}
            userSelection = forms.GetUserMeal(userSelection)
        dateDayCorresp[day] = {'date':startWeek + datetime.timedelta(days=daysCount),'userSelection': userSelection}
        daysCount += 1

selection_template.html

<form method="post">
  <table class="table table-hover table-bordered vertical-align">
    <thead>
      <tr class="table-primary">
        <th rowspan="2">Jour</th>
        <th colspan="3">Repas</th>
      </tr>
      <tr class="table-success">
          <th scope="col">Repas</th>
          <th scope="col">Salade</th>
          <th scope="col">Sandwich</th>
      </tr>
    </thead>
    <tbody>
        {% csrf_token %}
          {% for day in dateDayCorresp.items %}
          <tr>
            <th scope="row" class="table-warning">
              {{day.0}} ({{day.1.date}})
              <!-- {{day.1.userSelection}} -->
            </th>
            {% for field in day.1.userSelection %}
            <td>
              <label>{{ field }}</label>
            </td>
            {% endfor %}
          </tr>
          {% endfor %}
      </table>
      <button type="submit" class="btn btn-primary btn-lg btn-block fixed-bottom" id="buttonSave">Save</button>
    </form>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...