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
所以我有一个用户和学校模型,它们与 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