Po dodaniu nowego rekordu do tabeli, muszę wykonać instrukcję SQL w zewnętrznej bazie danych. To zapytanie obejmuje użycie ManyToManyField. Więc po prostu podłączyć funkcję tak:Funkcja ManyToManyField jest pusta w funkcji post_save()
post_save.connect(post_save_mymodel, sender=MyModel)
A w moim post_save_mymodel funkcji(), tutaj jest to, co robię:
def post_save_mymodel(sender, instance, created, *args, **kwargs):
if created:
for e in instance.my_m2mfield.all():
# Query including "e".
Ale szkoda, instance.my_m2mfield.all() jest zawsze puste! Chociaż powinny zawierać pewne elementy! Starałem się uzyskać nowy element wykonując
new_element = MyModel.objects.get(pk=instance.pk)
ale to niczego nie zmienia, wciąż mam ten sam problem ...
WNY pomocy/porady?
To rozwiązanie działa idealnie. Zakładam więc, że konieczne jest sprecyzowanie atrybutu, aby sygnał był wywoływany we właściwym czasie? Dzięki i tak. – Deneuve
W szczegółach jest diabeł. Procedura obsługi post_save_model nie jest wywoływana z ustawieniem akcji na "post_add", jeśli zawartość pola m2m zostanie wyczyszczona. Możesz chcieć wykryć to wydarzenie. Istnieje akcja "post_clear", ale, niestety, Django wydaje się usuwać pola m2m przed ich zmianą, więc zdarzenie "post_clear" jest generowane podczas zmian w polu m2m, jak również po jego wyczyszczeniu. – nmgeek
@Deneuve, Co "precyzyjne atrybut "znaczy? – nmgeek