Когда поле ManyToMany сохраняется в базе данных?Python

Программы на Python
Ответить
Anonymous
 Когда поле ManyToMany сохраняется в базе данных?

Сообщение Anonymous »


Учитывая (упрощенную) модель, используемую в приложении администратора Django:

models.py

назначение класса(models.Model): клиент = модели.ForeignKey(Клиент, пустое значение = Ложь, ноль = Истина, on_delete = модели. CASCADE) пианино = модели.ManyToManyField(Пианино, пусто=True) def save(self, *args, **kwargs): # Это новая встреча, а не пересохраняемая существующая? newAppointment = self.id — нет пытаться: super().save(*args, **kwargs) # Вызов «настоящего» метода save(). если новоеВстреча: # Возвращает пустой набор запросов для фортепиано в self.pianos.all(): печать (фортепиано) кроме: проходить Я хочу получить доступ к «пианино». Если это вновь созданная встреча, self.pianos возвращается



и self.pianos.all() возвращают пустой набор запросов, хотя фортепиано отображаются в форме шаблона, которая была отправлена ​​для инициации сохранения.

Однако, если это обновление существующей встречи, «пианино» возвращает данные, как и ожидалось.

Очевидно, что поле ManyToMany не сохраняется в базе данных сразу при вызове save(). Итак, как я могу получить доступ к данным, как показано ниже?

Я также попробовал альтернативный метод использования сигнала post_save, с точно таким же результатом:

@receiver(signals.post_save, sender=Встреча) Защиту createServiceHistory (отправитель, экземпляр, созданный, **kwargs): если создано: для фортепиано в экземпляре.pianos.all(): #empty queryset печать (фортепиано) В документации говорится, что поля ManyToMany сохраняются с помощью add(), а не save(), но я не понимаю, как это будет применяться в данном случае.
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»