Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/317.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用信号更新不同的表_Python_Django_Django Models_Django Signals - Fatal编程技术网

Python 使用信号更新不同的表

Python 使用信号更新不同的表,python,django,django-models,django-signals,Python,Django,Django Models,Django Signals,我有成员、颜色、组、成员颜色、成员组和颜色组表。成员,颜色,,组和颜色\u组表已经有了所需的寄存器,但我需要在将寄存器添加到members\u groups表时自动检查为该组指定的颜色,然后将寄存器添加到members\u colors表,其中members\u groups表中指定的成员以及为该成员指定的组指定的颜色属于 我想通过使用成员组作为发送者的post_save信号来实现这一点,但我不知道如何实现 编辑:我使用django的默认用户模型,这是我的models.py文件: class C

我有成员、颜色、组、成员颜色、成员组和颜色组表。成员,颜色,,组和颜色\u组表已经有了所需的寄存器,但我需要在将寄存器添加到members\u groups表时自动检查为该组指定的颜色,然后将寄存器添加到members\u colors表,其中members\u groups表中指定的成员以及为该成员指定的组指定的颜色属于

我想通过使用成员组作为发送者的post_save信号来实现这一点,但我不知道如何实现

编辑:我使用django的默认
用户
模型,这是我的
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)
我想要的是,当添加
组\u用户
中的寄存器时,自动更新
用户\u颜色
表,将
组\u用户
中的数据作为参考,以获取
组\u颜色
用户
中的值

编辑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)
你可以用这个信号。将此添加到您的
模型.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)

我明白了,但我无法理解的部分是
#做你想做的事情
part.Hm中的逻辑。我真的不明白你想要什么。你能发布你的模型吗?好的,我发布了模型。编辑了我的答案。不确定它是否是你想要的100%,但应该为你指出正确的方向。非常感谢@ilse2005