【发布时间】:2020-03-05 08:00:17
【问题描述】:
我还不是很精通 Django 信号。
我只希望 User 中每输入 6 个新条目,User_GraduateList 中保存的第一个配置文件将自动保存在 GraduateUser 中/p>
表用户
表User_GraduateList
这是我想要的结果在表 GraduateUser
因为 Joe Dio 是 User_GraduateList
中的第一个条目这是我的模型
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)
我没有收到任何错误
注意:这个问题和我之前的问题Django Signal post_save()不太相似
更新
@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
请阅读这篇文章,
如果 User 收到 6 个新条目,则将保存在 User_GraduateList 中的第一个配置文件删除并保存到另一个表 GraduateUser
Django Signal post_save() 和这个问题的区别是一旦系统检测到 User.Sponsor_User(模型中的外键 User)已经邀请了 2 个用户,该用户将自动保存在 User_GraduateList
再次更新
@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)
我尝试 print(graduate.user_set.count()) 结果总是 >>0 ,它没有计算 用户表中插入的新条目
另一个例子
在用户表
中插入每个新条目>>New Entry 1
>>New Entry 2
>>New Entry 3
>>New Entry 4
>>New Entry 5
>>New Entry 6
如果它到达 New Entry 6 保存在 User_GraduateList Table 中的第一个条目,则删除并保存到另一个表 GraduateUser
【问题讨论】:
-
发布您的输出和您遇到的任何错误。
-
我没有收到任何错误和输出
-
如果你没有得到 1 作为输出,那么你在创建用户时没有设置 Sponsor_User
-
在
instance.Sponsor_User之后添加print('Sponsor: ', sponsor)。你得到了什么? -
等待 mr@Mathias
标签: django django-views