У меня есть модель:
class Camera(models.Model):
users_allowed_to_view = models.ManyToManyField(User, ...)
def save(self, *args, **kwargs):
print(self.users_allowed_to_view.all())
super().save(*args, **kwargs)
Если я использую Django Admin для изменения камеры, изменения списка пользователей, которым разрешено просматривать мою камеру, и нажатия кнопки «Отправить», приведенное выше утверждение печати возвращает старый список пользователей (перед текущим сохранением).
Даже если я переместу оператор печати после super()
, я все равно получу старый список пользователей.
Есть ли способ получить новый список пользователей, которые будут сохранены?
Кроме того, связанный вопрос - я почти уверен, что .all () выше выполняет запрос БД. Могу ли я просто получить список идентификаторов, на которые ссылается поле, без выполнения запроса к БД, как вы можете сделать это для поля ForeignKey (с помощью foreignkeyfield_id)?
Обновление:
Даже с использованием post_save
сигнал вместо save()
, я все еще получаю старую версию ManyToManyField:
@receiver(models.signals.post_save, sender=Camera)
def execute_after_camera_save(sender, instance, created, *args, **kwargs):
print(instance.users_allowed_to_view.all())