在 Django 中创建用户时如何将用户添加到 ManyToManyField?
How to add a user to a ManyToManyField when creating User in Django?
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 时,我希望 link 这个普通用户通过 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 的字段。并且禁止在信号中使用请求。有人可以帮我吗?
嗯。我找到了解决方案。我需要在 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)
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 时,我希望 link 这个普通用户通过 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 的字段。并且禁止在信号中使用请求。有人可以帮我吗?
嗯。我找到了解决方案。我需要在 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)