Django - ManyToMany 字段到用户 return None

Django - ManyToMany field to User return None

这是我的模特

class Permissions(models.Model):
group = models.ForeignKey(Group)
Book = models.ForeignKey(Book)
users = models.ManyToManyField(User)

我实现了自定义保存方法来设置权限并将用户保存到组中:

   def save(self,*args,**kwargs):
    super(Permissions,self).save(*args,**kwargs)
    assign_perm('view_Book',self.group, self.book)
    for gen in self.book.books.all():
        assign_perm('view_Genre', self.group, gen)
    for u in self.users.all():
        u.groups.add(self.group)
        u.save()

有了这个,我可以设置权限,但用户不会被添加到组中。我错过了什么吗? 当我 print(users) 时 return 是 None,或 []。 谁能帮帮我?

您的 permission 对象刚刚创建,因此他没有用户。这就是为什么你得到一个空列表。

可能您想使用:User.objects.all(),获取所有用户而不考虑权限。

我遇到了类似的问题并使用 m2m_signal 解决了问题。

这是一个例子:

def add_users_book_permissions(sender, **kwargs):

   permissions = kwargs['instance']
   for u in permissions.users.all():
       u.groups.add(permission.group)
       u.save()

m2m_changed.connect(add_users_book_permission,Permissions.users.through)