Python 在Django中创建用户时,如何将用户添加到ManyToManyField?
型号。py: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
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)