Django使用外键发出post_保存信号
我还不是很精通Django信号 我只希望在User中每输入6个新条目,保存在User\u GraduateList中的第一个配置文件将自动保存在GraduateUser 表用户 表用户\毕业生名单 这是我希望表格中的结果GraduateUser 因为Joe Dio是用户\大学毕业生列表中的第一个条目 这是我的模型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
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(用户=发起人)
发布您的输出和遇到的任何错误。我不会收到任何错误和输出如果您在创建Useraddprint(“赞助商:”,赞助商)时没有得到1作为输出,那么您就没有在实例之后设置赞助商用户。赞助商用户
。你得到了什么?等等mr@Mathiasif“用户”收到6个新条目,第一个配置文件保存在“用户\毕业生列表”中删除并保存到另一个表“毕业生用户”您是否按照解决方案中的建议更改了毕业生用户
模型?