Nie bardzo znam sygnały Django i mogę skorzystać z pomocy.Używanie Django m2m_changed do modyfikowania tego, co jest zapisywane pre_add
Jak zmodyfikować zestaw pk_set przed zapisaniem instancji? Czy muszę zwrócić coś do osoby dzwoniącej (np. kwargs
)? Czy mogę samodzielnie zapisać instance
?
Jako uproszczony przykład: chciałem upewnić się, że kategoria zawierająca pk=1
jest dołączona do wszystkich moich filmów wideo po ich zapisaniu. Jak to zrobić z m2m_changed
?
class Video(models.Model):
category = models.ManyToManyField('Category')
def video_category_changed(sender, **kwargs):
action = kwargs.pop('action', None)
pk_set = kwargs.pop('pk_set', None)
instance = kwargs.pop('instance', None)
if action == "pre_add":
if 1 not in pk_set:
pk_set.update([ 1 ]) # adding this to the set
# do something else?
# profit?
m2m_changed.connect(video_category_changed, sender=Video.category.through)
Nie jest wymagane zwracanie wartości w sygnałach. Nie musisz też zapisywać instancji. Po prostu dodaj kod do wykonania w odpowiedzi na wybrane zdarzenia. – mvillaress