#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)
Надеюсь, это поможет!