«Принципиальный» ответ на ваш вопрос - рассмотреть возможность использования сигнала pre_save
, встроенного в Django .
По сути, вы подключаете функцию слушателя к сигналу pre_save
полностью документировано по ссылке выше, и вы можете изменить нужные свойства в вашем экземпляре модели.Только после того, как ваш слушатель завершит выполнение (как и любые другие слушатели, подключенные к pre_save
в этой модели), экземпляр модели будет сохранен в базе данных.
Если я правильно понимаю ваш код, вы захотите свой Queue
переменная установлена в True
тогда и только тогда, когда в базе данных имеется 25 или более активных записей событий, и False
в противном случае (с противоположностью для Active
- зачем вам два логических значения, я не понимаю).Вы могли бы сделать это с сигналами, сделав что-то вроде этого ...
from django.db.signals import pre_save
def update_event_active_queue_status(sender, instance=None, **kwargs):
if Event.objects.filter(Active=True).count() >= 25:
instance.Queue = True
else:
instance.Active = True
pre_save.connect(update_event_active_queue_status, sender=Event)
Отдельная проблема, которую вы пытаетесь решить, и я не думаю, что это подходящее место для этого, движетсясобытия в очереди возвращаются к активным, когда число активных событий падает ниже 25. Я не знаю ваших точных потребностей, но я бы, вероятно, сделал это на работе cron или каким-либо другим менеджером событий, а не рассматривал их здесь.Прямо сейчас, если в систему не будет добавлено ни одного события (или изменено каким-либо другим способом), элементы никогда не будут извлечены из очереди.Это, вероятно, не то, что вы хотите.
Конечно, вы знаете свои потребности лучше, чем я, поэтому примите мои рекомендации с долей соли.