使用信号更新不同的表
Use a signal to update different tables
我有成员、颜色、组、members_colors、members_groups 和 colors_groups table。成员、颜色、组和 colors_groups tables 已经有所需的寄存器,但我需要在将寄存器添加到 members_groups table 时自动检查分配的颜色该组,然后将寄存器添加到 members_colors table 中,成员在 members_groups table 中指定,并为该成员所属的组指定颜色。
我想通过使用 members_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
中的寄存器时,使用 Groups_Users
中的数据作为参考自动更新 Users_Colors
table 以从中获取值Groups_Colors
和 User
.
编辑 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)
我有成员、颜色、组、members_colors、members_groups 和 colors_groups table。成员、颜色、组和 colors_groups tables 已经有所需的寄存器,但我需要在将寄存器添加到 members_groups table 时自动检查分配的颜色该组,然后将寄存器添加到 members_colors table 中,成员在 members_groups table 中指定,并为该成员所属的组指定颜色。
我想通过使用 members_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
中的寄存器时,使用 Groups_Users
中的数据作为参考自动更新 Users_Colors
table 以从中获取值Groups_Colors
和 User
.
编辑 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)