Мне нужно использовать booleanfield на переднем конце

Я хочу, чтобы пользователь использовал BooleanField, чтобы выбрать, какие блюда ест животное (завтрак, обед, ужин, возможно, их комбинация). И если флажок установлен, я хочу, чтобы он отображал на экране расписание, где вы можете отметить, съело ли животное указанную еду в тот день. Проблема в том, что всякий раз, когда я добавляю свое расписание, оно не создает расписание, в котором я могу отметить, поел ли животное. (Я знаю, что это объяснение может показаться запутанным).

Вот мои модели для животных и расписания:

class Animal(models.Model):
    """The actual animal, embeded in animaltype"""
    animal_type = models.ForeignKey(AnimalType, on_delete=models.CASCADE)
    name = models.CharField(max_length=60, default='')
    date_added = models.DateTimeField(auto_now_add=True)

    def __str__(self):
        if len(self.name)>20:
            return self.name[:20] + "..."
        else:
            return self.name

class Schedule(models.Model):
    """Model for animal eating schedule"""
    animal = models.ForeignKey('Animal', on_delete=models.CASCADE)
    breakfast = models.BooleanField(default=False)
    lunch = models.BooleanField(default=False)
    dinner = models.BooleanField(default=False)

Вот мои просмотры для добавления расписания и его просмотра (в режиме просмотра животных):

@login_required
def new_schedule(request, animal_id):
    """add a new schedule for the animal"""
    animal = Animal.objects.get(id=animal_id)

    if request.method != 'POST':
        #create 3 different checkboxes for the meals and if they check it, add that meal to their schedule
        form = ScheduleForm()
    else:
        #POST data submitted
        form = ScheduleForm(data=request.POST)
        if form.is_valid():
            new_schedule = form.save(commit=False)
            new_schedule.animal = animal
            new_schedule.save()
            return HttpResponseRedirect(reverse('zoo_animal_feeders:animal', args=[animal_id]))

    context = {'animal':animal, 'form':form}
    return render(request, 'zoo_animal_feeders/new_schedule.html', context)

@login_required
def animal(request, animal_id):
    """shows a single animal and the schedule associated"""
    animal = Animal.objects.get(id=animal_id)

    schedule = animal.schedule_set.order_by('-date_added')
    context = {'animal':animal, 'schedule':schedule}
    return render(request, 'zoo_animal_feeders/animal.html', context)

Вот мой шаблон расписания добавления:

{% extends "zoo_animal_feeders/base.html" %}
{% load bootstrap3 %}

{% block header %}
  <h2><a href="{% url 'zoo_animal_feeders:animal' animal.id %}">{{ animal }}</a></h2>
  <h2>Add new schedule:</h2>
{% endblock header %}

{% block content %}

  <form action="{% url 'zoo_animal_feeders:new_schedule' animal.id %}" method="post" class="form">
    {% csrf_token %}
    {% bootstrap_form form %}

    {% buttons %}
      <button name='submit'>add schedule</button>
    {% endbuttons %}
  </form>

{% endblock content %}

А вот шаблон, на котором предполагается увидеть расписание:

{% extends 'zoo_animal_feeders/base.html' %}

{% block header %}
  <h2>{{ animal }}</h2>
{% endblock header %}

{% block content %}
  <p>Schedule:</p>
  <p><a href="{% url 'zoo_animal_feeders:new_schedule' animal.id %}">add schedule</a></p>
  {% for schedule in schedules %}
    <div class="panel panel-default">
      <div class="panel-heading">
        <h3>
          <small>
            <a href="{% url 'zoo_animal_feeders:edit_schedule' schedule.id %}">edit schedule</a>
          </small>
        </h3>
      </div>
      <div class="panel-body">
        <!--This is where I need to add the checkboxes that you can check and stay checked until midnight each night-->
        {% if schedule.breakfast == True %}
          {{ schedule.breakfast }}
        {% endif %}
        {% if schedule.lunch == True %}
          {{ schedule.lunch }}
        {% endif %}
        {% if schedule.dinner == True %}
          {{ schedule.dinner }}
        {% endif %}
      </div>
    </div>
  {% empty %}
    <li>There are no schedules for this animal yet.</li>
  {% endfor %}

{% endblock content %}

Кажется, я не могу понять, как действительно добавить расписание и сделать экземпляр schedule.breakfast == True для создания флажка.

0
0
39
1

Ответы 1

{% for schedule in schedules %}

Измените эту строку на

 {% for s in schedule %}

Вы возвращаете {'schedule': schedule} в контексте

Теперь пользователь s.breakfast и т. д. Для каждого условия

Также почему внешний ключ животного указан в кавычках? «Животное»?

Mohit Harshan 26.10.2018 16:22

Другие вопросы по теме