Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/24.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
Python 在Django中创建用户时,如何将用户添加到ManyToManyField?_Python_Django_Django Models_Django Admin_Django Users - Fatal编程技术网

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

Python 在Django中创建用户时,如何将用户添加到ManyToManyField?,python,django,django-models,django-admin,django-users,Python,Django,Django Models,Django Admin,Django Users,型号。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.ManyToMan

型号。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'
我想要下一个:我以管理员用户的身份登录管理员站点,这有员工权限。然后我可以创建固定用户。当我创建一个新的RegularUser时,我希望通过ManyToManyField将这个普通用户链接到AdminUser,以便这个RegularUser拥有AdminUser。AdminUser可以在adminSite中管理此常规用户

我想要一些这样的:

类RegularUserCreationForm(forms.ModelForm): ...


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

好的。我找到了解决办法。我需要在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)

现在,您只需设置父属性。因此,所有的
MyUser
s都是staff.No。只有管理员和用户才是员工。此属性在子实例中固定。无论如何,这不是问题所在。谢斯威伦是对的。你不能那样设置这些属性;你的代码完全被破坏了。但对于您的实际问题,您确定不需要ForeignKey而不是多对多吗?要解决人员问题,我将删除子模型的MyUser.is_人员。我必须以某种方式将AdminUser.is_staff设置为True。我认为这是一个非常多的问题,因为常规用户可以由许多AdminUsers管理,AdminUsers也可以管理许多常规用户。这不是M2M关系的目的吗?
    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)