Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/20.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信号后置保存()_Django_Django Models - Fatal编程技术网

Django信号后置保存()

Django信号后置保存(),django,django-models,Django,Django Models,一旦系统检测到您已经邀请了2名用户,您的个人资料将自动保存在毕业生列表中 请参见此图片,例如: 这是毕业生名单表 如图所示,Joe Dio已经邀请了2位用户(miro和justin)(您可以在赞助商用户中看到) 我希望您能使用django信号帮助我解决这个问题,提前谢谢:) 我希望我的例子能让你明白我想得到什么 这是我的模特 class User(models.Model): firstname = models.CharField(max_length=500, null=True

一旦系统检测到您已经邀请了2名用户,您的个人资料将自动保存在毕业生列表中

请参见此图片,例如:

这是毕业生名单表

如图所示,Joe Dio已经邀请了2位用户(mirojustin)(您可以在赞助商用户中看到)

我希望您能使用django信号帮助我解决这个问题,提前谢谢:)

我希望我的例子能让你明白我想得到什么

这是我的模特

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)

    birthday = 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)
    def __str__(self):
        suser = '{0.User}'
更新这是@AKS先生的答案

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 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)
出于阅读目的,我嵌套了if条件。如果您觉得舒服,您可以使用
加入

上面的解决方案基于这样的假设,即我们只希望在创建新用户时执行此操作。如果可以稍后设置发起人用户,则可以从第一个条件中删除创建的
检查


另外,从模型来看,我认为最好在
用户_毕业生列表
用户
模型之间建立一对一的关系。

我认为您忘记了将字典中的任何值从视图发送到html页面。不mr@MajidA…为什么您的
渲染
for循环中
。它必须在那个街区之外。除非它只会重复一次。错误的键入sorry是在创建受邀请的用户时设置的
赞助商用户
,或者以后也可以链接它?我应该在代码中的什么位置设置?在User_GraduateList下?是的,您需要导入必要的东西。它不起作用mr@AKS,我已经导入了接收器并进行了后期保存,我很确定我误解了你的代码,或者你的答案不起作用,只是说不起作用也没有任何帮助。您是否遇到任何错误,或者您是否尝试过调试,这正是它无法按预期工作的原因?根据您更新的问题,该方法不应放在用户\ U GraduateList中。当你在下面提问时,我的意思是在模型下面,但与模型的方法不在同一级别。我没有收到任何错误,我已经调试过了,不存在错误,我尝试在创建后添加打印('ssss'),发起人:它没有在终端中打印