簡體   English   中英

使用信號更新不同的表

[英]Use a signal to update different tables

我有成員,顏色,組,members_colors,members_groups和colors_groups表。 成員,顏色,組和colors_groups表alredy具有所需的寄存器,但是我需要在將一個寄存器添加到members_groups表時自動檢查該組的顏色,然后將members寄存器添加到members_colors表中,其成員在members_groups表中指定以及成員所屬組的顏色。

我認為使用member_groups作為發送者使用post_save信號來做到這一點,但我無法弄清楚如何。

編輯:我使用django的默認User模型,這是我的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)

我要的是,當在寄存器Groups_Users添加,自動更新Users_Colors使用作為參考的數據表Groups_Users從取值Groups_ColorsUser

編輯2感謝@ ilse2005我可以得到我想要的信號。 如果有人需要類似的東西,這就是信號:

@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)

您可以使用post_save信號。 將其添加到models.py

from django.db.models.signals import post_save
from django.dispatch import receiver

#sender is the Model after which save method the signal is called
@receiver(post_save, sender=Groups_Users) 
def signal_receiver(sender, instance, created, **kwargs):
    # instance is the new GroupUsers
    group = instance.group
    user = instance.user
    # loop over Group_colors and create User_Colors
    for color in group.gc_color.all():
        Users_Colors.objects.create(user=user, color.color)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM