Как я могу получить актуальную ссылку на поле «многие ко многим» в методе save () объекта в django? - PullRequest
0 голосов
/ 23 апреля 2020

У меня есть модель:

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())
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...