@DarkiDeuce

Почему не срабатывает условие в django?

У меня есть цикл, в котором я прохожу по экземплярам книг из БД

В каждой итерации вывожу информацию о экземпляре. В зависимость от значения поля status информация должна отличаться. Например, если значение поля status равно значение "На складе", то должен появляться текст с ссылкой, но этого не происходит.

Почти уверен, что проблема в типе данных, которые забираю из БД, то есть я не правильно описываю условие, но не понимаю, что именно я делаю не так.

HTML файл:
{% for copy in book.bookinstance_set.all %}
        <hr><p class="{% if copy.status == 1 %} text-success
                      {% elif copy.status == 2 %} text-danger
                      {% else %} text-warning
                      {% endif %}"> {{ copy.get_status_display }}</p>

        <p><strong>Издательство:</strong> {{ copy.imprint }}</p>
        <p class="text-muted"><strong>Инвентарный номер:</strong> {{ copy.id }}</p>
        <p><strong>Статус экземпляра книги в БД:</strong> {{ copy.status }}</p>

        <p>
            {% if copy.status == 'На складе' %}
                <a href="">Заказать</a>
            {% endif %}
        </p>

    {% endfor %}


Файл models.py:

class Book(models.Model):
    title = models.CharField(max_length=200,
                             help_text='Введите наазвание книги',
                             verbose_name='Название книги')
    genre = models.ForeignKey('Genre',
                              on_delete=models.CASCADE,
                              help_text='Введите жанр для книги',
                              verbose_name='Жанр книги',
                              null=True)
    language = models.ForeignKey('Language',
                                 on_delete=models.CASCADE,
                                 help_text='Введите язык книги',
                                 verbose_name='Язык книги',
                                 null=True)
    author = models.ManyToManyField('Author',
                                    help_text='Выберете автора книги',
                                    verbose_name='Автор книги')
    summary = models.TextField(max_length=1000,
                               help_text='Введите краткое описание книги',
                               verbose_name='Аннотация книги')
    isbn = models.CharField(max_length=13,
                            help_text='Должно содержать 13 символов',
                            verbose_name='ISB книги')

    def __str__(self):
        return self.title

    def get_absolute_url(self):
        return reverse('book-detail', args=[str(self.id)])

    def display_author(self):
        return ', '.join([author.last_name for author in self.author.all()])

    display_author.short_description = 'Авторы'

class Status(models.Model):
    name = models.CharField(max_length=20,
                            help_text='Введите статус экемпляра книги',
                            verbose_name='Статус экземпляра книги')

    def __str__(self):
        return self.name

class BookInstance(models.Model):
    book = models.ForeignKey('Book',
                             on_delete=models.CASCADE,
                             null=True,
                             verbose_name='Название книги')
    inv_nom = models.CharField(max_length=20,
                               null=True,
                               help_text='Введите инвентарный номер экземпляра',
                               verbose_name='Инвентарный номер')
    imprint = models.CharField(max_length=200,
                               help_text='Введите издательство и год выпуска',
                               verbose_name='Издательство')
    status = models.ForeignKey('Status',
                               on_delete=models.CASCADE,
                               null=True,
                               help_text='Изменить состояние экземпляра',
                               verbose_name='Статус экземпляра книги')
    due_back = models.DateField(null=True,
                                blank=True,
                                help_text='Введите конец срока статуса',
                                verbose_name='Дата окночания статуса')
    borrower = models.ForeignKey(User,
                                 on_delete=models.SET_NULL,
                                 null=True,
                                 blank=True,
                                 verbose_name='Заказчик',
                                 help_text='Выберете заказчика книги')
    @property
    def is_overdue(self):
        if self.due_back and date.today() > self.due_back:
            return True
        return False

    def __str__(self):
        return '%s %s %s' % (self.inv_nom, self.book, self.status)
  • Вопрос задан
  • 76 просмотров
Решения вопроса 1
Mi11er
@Mi11er
A human...
И снова... Учитесь дебажить свое ПО.

if copy.status == 1 , у вас статус , верент строку, а не ID
Если хочется по ID , то if copy.status.id == 1
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы