J'ai les tables membres, couleurs, groupes, members_colors, members_groups et colors_groups. Les tables members, colors, groups et colors_groups ont déjà les registres nécessaires mais j'en ai besoin quand un registre est ajouté à la table members_groups, vérifie automatiquement les couleurs assignées à ce groupe puis ajoute des registres à la table members_colors avec le membre spécifié dans la table members_groups et les couleurs assignées au groupe auquel le membre appartient.Utiliser un signal pour mettre à jour différentes tables
Je pense faire cela avec un signal post_save en utilisant members_groups comme expéditeur mais je n'arrive pas à comprendre comment.
EDIT: J'utilise la valeur par défaut User
modèle de django et voici mon fichier models.py
:
class Colors(models.Model):
name = models.CharField(max_length=50)
class Groups(models.Model):
name = models.CharField(max_length=100)
class Groups_Colors(models.Model):
group = models.ForeignKey(Groups, related_name='gc_group', null=True, blank=True)
color = models.ForeignKey(Colors, related_name='gc_color', null=True, blank=True)
class Users_Colors(models.Model):
user = models.ForeignKey(User, related_name='uc_user', null=True, blank=True)
color = models.ForeignKey(Colors, related_name='uc_color', null=True, blank=True)
class Groups_Users(models.Model):
group = models.ForeignKey(Groups, related_name='gu_group', null=True, blank=True)
user = models.ForeignKey(User, related_name='gu_user', null=True, blank=True)
Ce que je veux quand un registre Groups_Users
est ajouté, mettre à jour automatiquement la table Users_Colors
en utilisant comme référence les données dans Groups_Users
pour prendre les valeurs de Groups_Colors
et User
.
EDIT 2 Grâce à @ ilse2005, je peux faire fonctionner le signal comme je le souhaite. Voici le signal si quelqu'un besoin de quelque chose aussi bien:
@receiver(post_save, sender=Groups_Users, dispatch_uid='signal_receiver')
def signal_receiver(sender, instance, **kwargs):
group = instance.group
user = instance.user
colors = Groups_Colors.objects.filter(group_id=group).values_list('color_id',flat=True)
for color in colors:
Users_Colors.objects.create(user_id=user, color_id = color)
que je reçois, mais la partie que je ne peux pas comprendre la logique est la '#Ne les trucs que vous want' partie. –
Hm. Ne comprends pas vraiment ce que tu veux. Pourriez-vous poster vos modèles? – ilse2005
Ok, j'ai posté les modèles. –