在Django中创建用户时如何将用户添加到ManyToManyField?

时间:2018-07-27 16:44:49

标签: python django django-models django-admin django-users

Models.py:

class RegularUser(MyUser):
    MyUser.is_staff = False
    MyUser.is_superuser = False

class Meta:
    verbose_name = 'Usuario Regular'
    verbose_name_plural = 'Usuarios Regulares'



class AdminUser(MyUser):
    usuarios = models.ManyToManyField(RegularUser, help_text="Selecciona los usuarios que administra", blank=True)
    MyUser.is_staff = True

class Meta:
    verbose_name = 'Administrador'
    verbose_name_plural = 'Adminsitradores'

我想要下一个:我以具有用户权限的AdminUser身份登录管理站点。然后,我可以创建RegularUsers。当我创建一个新的RegularUser时,我想通过ManyToManyField将此常规用户链接到AdminUser,以便此RegularUser拥有AdminUser。 AdminUser可以在adminSite中管理此RegularUser。

我想要这样的东西:

Class RegularUserCreationForm(forms.ModelForm)类:     ...     ...

@receiver(post_save, sender=RegularUser)
def link_user_admin(sender, instance, created, **kwargs):
    if created:
        instance.adminuser = request.user

但是adminuser不是RegularUser的字段。并且禁止在信号中使用请求。有人可以帮我吗?

1 个答案:

答案 0 :(得分:0)

好吧。我找到了解决方案。我需要在post_save方法中使用该请求。但是,您不能在Django信号中使用它,因此可以使用可以访问请求的Django save_model方法。

    def save_model(self, request, obj, form, change):
        if obj:
            # Save the object
            super().save_model(request, obj, form, change)
            # Add the user instance to M2M field of the request.user (The admin User) who create the RegularUser 
            request.user.adminuser.usuarios.add(obj)