DRF:在另一个模型序列化程序或视图中更新模型

DRF: Updating a model in another models serializer or view

所以我有一个用户和学校模型,它们与 Owens(ManyToMany)、学生和教职员工相关,如果所有者注册并创建了一所学校,我想对 Owens 字段执行部分更新request.user 从拥有 null/blank 或以前创建的学校到添加新创建的学校

用户模型

 class User(AbstractBaseUser, PermissionsMixin):
    
        class SEX(models.TextChoices):
            ...
    
        class TYPES(models.TextChoices):
            ...
    
        ...
        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/