首页 > 解决方案 > 将组添加到代理用户

问题描述

我将 Django 与 Wagtail CMS 一起使用,并从 User 类创建了两个代理模型。我想从代理类中添加一个用户创建组。我试图添加信号,但这显然不适用于代理模型。

因此,在保存时,我想将教师添加到Teachers组中,并将学生添加到Students

#models.py
class User(AbstractUser):

    class Types(models.TextChoices):
        STUDENT = "STUDENT", "Student"
        TEACHER = "TEACHER", "Teacher"

    type = models.CharField(_('Type'), max_length=50, choices=Types.choices, default=Types.STUDENT)

class Student(User):
    class Meta:
        proxy: True

    def save(self, *args, **kwargs):
        if not self.pk:
            self.type = User.Types.STUDENT
        return super().save(*args, **kwargs)

class Teacher(User):
    class Meta:
        proxy: True  

    def save(self, *args, **kwargs):
        if not self.pk:
            self.type = User.Types.TEACHER
        return super().save(*args, **kwargs)

标签: djangowagtail

解决方案


您可以在save方法结束时执行此操作:

class Student(User):
    class Meta:
        proxy: True

    def save(self, *args, **kwargs):
        creating = not self.pk
        if creating:
            self.type = User.Types.STUDENT
        super().save(*args, **kwargs)
        if creating:
            self.groups.add(Group.objects.get(name='Students'))

推荐阅读