Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/facebook/9.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
Django使用外键发出post_保存信号_Django_Django Views - Fatal编程技术网

Django使用外键发出post_保存信号

Django使用外键发出post_保存信号,django,django-views,Django,Django Views,我还不是很精通Django信号 我只希望在User中每输入6个新条目,保存在User\u GraduateList中的第一个配置文件将自动保存在GraduateUser 表用户 表用户\毕业生名单 这是我希望表格中的结果GraduateUser 因为Joe Dio是用户\大学毕业生列表中的第一个条目 这是我的模型 class User(models.Model): firstname = models.CharField(max_length=500, null=True,blan

我还不是很精通Django信号

我只希望在User中每输入6个新条目,保存在User\u GraduateList中的第一个配置文件将自动保存在GraduateUser

用户

用户\毕业生名单

这是我希望表格中的结果GraduateUser

因为Joe Dio是用户\大学毕业生列表中的第一个条目

这是我的模型

class User(models.Model):
    firstname = models.CharField(max_length=500, null=True,blank=True)
    lastname = models.CharField(max_length=500, null=True, blank=True)
    middlename = models.CharField(max_length=500, null=True, blank=True)

    Email  =  models.CharField(max_length=500,null=True,blank=True)
    Sponsor_User = models.ForeignKey('self', on_delete=models.CASCADE,blank=True, null=True)


class User_GraduateList(models.Model):
    User = models.ForeignKey(User, related_name='+', on_delete=models.CASCADE, blank=True)

@receiver(post_save, sender=User)
def create_graduates(sender, instance, created, **kwargs):
    sponsor = instance.Sponsor_User
    if created and sponsor:
        if sponsor.user_set.count() >= 2:
            if not User_GraduateList.objects.filter(User=sponsor).exists():
                User_GraduateList.objects.create(User=sponsor)

class GraduateUser(models.Model):
    User = models.ForeignKey(User_GraduateList, on_delete=models.CASCADE, blank=True)

    def __str__(self):
        suser = '{0.User}'
        return suser.format(self)

@receiver(post_save, sender=User)
def create_graduates(sender, instance, created, **kwargs):
    sponsor = instance
    if created and sponsor:
        print("1")
        if sponsor.user_set.count() >= 6:
            print("2")
            if not GraduateUser.objects.filter(User=sponsor).exists():
                print("3")
                GraduateUser.objects.create(User=sponsor)
我没有收到任何错误

注意:这个问题与我之前的问题不太相似

更新

@receiver(post_save, sender=User)
    def create_graduates(sender, instance, created, **kwargs):
        sponsor = instance
        print(instance)
        if created and sponsor:
            print("1")
            if sponsor.user_set.count() >= 6:
                print("2")
                if not GraduateUser.objects.filter(User=sponsor).exists():
                    print("3")
                    GraduateUser.objects.create(User=sponsor)
当我尝试在用户表中插入数据时

我在cmd或终端中收到每个新企业的id和1

 >>new entry
 >>1
请读这篇文章

如果用户收到6个新条目,则第一个配置文件保存在用户_GraduateList删除并保存到另一个表GraduateUser

与此问题的区别在于,一旦系统检测到用户。赞助商用户(型号中的外键用户
)已经邀请了2个用户,该用户将自动保存在用户

再次更新

@receiver(post_save, sender=User)
def im_graduate(sender, instance, created, **kwargs):
    s = User_GraduateList.objects.filter(id = instance.id).order_by('id')
    graduate = instance
    if created and graduate:
        print(graduate.user_set.count())
        if graduate.user_set.count() == 6:
            if not GraduateUser.objects.filter(User=s).exists():
                GraduateUser.objects.create(User=s)
我尝试打印(graduate.user\u set.count())结果总是>>0,它没有计算插入用户表中的新条目

>>New Entry 1
>>New Entry 2
>>New Entry 3
>>New Entry 4
>>New Entry 5
>>New Entry 6
另一个例子

对于每个新条目,在用户表中插入

>>New Entry 1
>>New Entry 2
>>New Entry 3
>>New Entry 4
>>New Entry 5
>>New Entry 6
如果它到达新条目6保存在User\u GraduateList表中的第一个条目删除并保存到另一个表GraduateUser

,我将尝试回答:

首先,我认为在
GraduateUser
中,外键关系应该在
User
上,而不是在
User\u GraduateList

class GraduateUser(models.Model):
    User = models.ForeignKey(User, on_delete=models.CASCADE, blank=True)
接下来,让我们在一个信号中完成所有操作。我们不需要两个信号

@receiver(post_save, sender=User)
def create_graduates(sender, instance, created, **kwargs):
    sponsor = instance.Sponsor_User
    if created and sponsor:
        user_count = sponsor.user_set.count()
        if 2 <= user_count < 6:
            if not User_GraduateList.objects.filter(User=sponsor).exists():
                User_GraduateList.objects.create(User=sponsor)
        elif user_count >= 6:
            User_GraduateList.objects.filter(User=sponsor).delete()
            if not GraduateUser.objects.filter(User=sponsor).exists():
                GraduateUser.objects.create(User=sponsor)
@receiver(保存后,发送方=用户)
def create_毕业生(发件人、实例、已创建、**kwargs):
赞助商=实例。赞助商\用户
如果创建并发起:
user\u count=赞助商.user\u set.count()
如果2=6:
User\u GraduateList.objects.filter(用户=赞助商).delete()
如果不是GraduateUser.objects.filter(用户=赞助商).exists():
GraduateUser.objects.create(用户=发起人)

发布您的输出和遇到的任何错误。我不会收到任何错误和输出如果您在创建Useradd
print(“赞助商:”,赞助商)时没有得到1作为输出,那么您就没有在
实例之后设置赞助商用户。赞助商用户
。你得到了什么?等等mr@Mathiasif“用户”收到6个新条目,第一个配置文件保存在“用户\毕业生列表”中删除并保存到另一个表“毕业生用户”您是否按照解决方案中的建议更改了
毕业生用户
模型?