Non ho molta familiarità con i segnali di Django e potrei usare un po 'di aiuto.Utilizzo di m2m_changed di Django per modificare ciò che viene salvato pre_add
Come si modifica il pk_set prima che l'istanza venga salvata? Devo restituire qualcosa al chiamante del segnale (come lo kwargs
)? Oppure posso salvare lo instance
da solo?
Come esempio semplificato: volevo garantire che la Categoria con pk=1
sia inclusa in tutti i miei video quando vengono salvati. Come dovrei farlo con 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)
Non è necessario restituire valori nei segnali. Inoltre, non è necessario salvare l'istanza. Basta aggiungere il codice da eseguire in risposta agli eventi selezionati. – mvillaress