DRF: Обновление модели в другом сериализаторе моделей или представлении

Итак, у меня есть модель User и schools, которые связаны как Owens(ManyToMany), student и staff, если владелец регистрируется и создает школу, я хотел бы выполнить частичное обновление поля Owens в request.user с null/blank или ранее созданных школ до добавления вновь созданной школы

модель пользователя

 class User(AbstractBaseUser, PermissionsMixin):
    
        class SEX(models.TextChoices):
            MALE = "MALE", "Male"
            FEMALE = "FEMALE", "Female"
    
        class TYPES(models.TextChoices):
            OWNER = "OWNER", "Owner"
            PARTNER = "PARTNER", "Partner"
            STUDENT = "STUDENT", "Student"
            STAFF = "STAFF", "Staff"
            TEACHER = "TEACHER", "Teacher"
            DRIVER = "DRIVER", "Driver"
            DIRECTOR = "DIRECTOR", "Director"
            VICE_DIR = "VICE_DIR", "Vice director"
    
        type = models.CharField(
            _("User Type"), max_length=50, choices=TYPES.choices, default=None, blank=True, null=True)
        sex = models.CharField(
            _("Sex Type"), max_length=50, choices=SEX.choices, default=None, blank=True, null=True)
        email = models.EmailField(
            _("Your Email"), max_length=254, unique=True, default=None, blank=True, null=True)
        student_id = models.CharField(
            _("student id"), unique=True, max_length=10, blank=True, null=True)
        firstname = models.CharField(max_length=250, blank=False, null=True)
        middlename = models.CharField(max_length=250, blank=True, null=True)
        lastname = models.CharField(max_length=250, blank=False, null=True)
        # grade = models.ForeignKey(Grade, verbose_name=_(
        #     "grade"), on_delete=models.CASCADE, blank=True, null=True)
        room = models.ForeignKey(Class, verbose_name=_(
            "class"), on_delete=models.CASCADE, blank=True, null=True)
        phone = models.CharField(
            _("phone number"), max_length=13, blank=True, null=True)
        age = IntegerRangeField(min_value=1, max_value=99,
                                default=25, blank=True, null=True)
    
        owens = models.ManyToManyField(School, verbose_name=_(
            "School_owner"), related_name='Schoolowner', blank=True)

serializers.py

class SchoolSerializerBase(serializers.ModelSerializer):
    ...

class Meta:
    model = School
    fields = ...

def validate(self, attrs):
     ...
    return attrs

def create(self, validated_data):
    instance = School.objects.create(
        ...
    )
    instance.save()
    return instance

и у меня есть простой вид для этого

class CreateSchoolView(generics.CreateAPIView):
    queryset = School.objects.all()
    permission_classes = [IsSchoolOwner, ]
    serializer_class = SchoolSerializerBase

Мой вопрос: как мне обновить поле request.user.ownes и добавить в него экземпляр школы?

Вы можете получить этот результат, переопределив .create() в вашем сериализаторе

В вашем сериализаторе

def create(self, validated_data):
   instance = super().create(validated_data) # this is the school
   # you then create the entry for your User+School
   # example
   user = self.context['request'].user
   user.owens.add(instance)
   return instance

https://docs.djangoproject.com/en/3.2/ref/models/relations/

Вернуться на верх