флажок django «эксклюзивный»

#django #django-admin

#django #django-администратор

Вопрос:

Мне было интересно, как я мог бы установить в Django «эксклюзивный» флажок и установить его в admin? Я имею в виду, что у меня есть приложение, которое хранит опросы, и на главной странице может быть только один, поэтому я добавляю поле front_page в базу данных и делаю его bool. True показывает, False — нет. Поэтому всякий раз, когда я устанавливаю в admin для поля front_page опроса значение true, я хочу, чтобы для каждого другого опроса было установлено значение false, это редактирование выполняется в admin. Как Flasker, я могу придумать 100 способов сделать это в другом месте, но эта штука с django меня смутила. Спасибо!

Ответ №1:

По сути, то, что вы хотите сделать, это переопределить метод сохранения модели, у которой есть эксклюзивный флаг, а затем в методе сохранения проверить, включен ли флаг. Если это так, то выполните запрос, чтобы найти все записи, для которых включен флаг, и отключить их. Затем сохраните. Это выглядело бы примерно так:

 class Poll(models.Model):
    #...
    front_page = models.BooleanField()
    #...

    def save(self, *args, **kwargs):
        if self.front_page:
            Poll.objects.filter(front_page=True).update(front_page=False)

        super(Poll, self).save(*args, **kwargs)
  

Надеюсь, это поможет!