我不知道该如何工作...
我有2种型号:
组是我要保存的自定义模型。
class Group(models.Model):
name = models.CharField(max_length=40)
subject = models.CharField(max_length=40)
user = models.ForeignKey('User', on_delete=models.CASCADE)
用户是应用程序的标准用户模型。我现在正在跳过UserManager。简单地说,用户可以有多个组。
class User(AbstractBaseUser, PermissionsMixin):
name = models.CharField(max_length=40, null=True, blank=True)
surname = models.CharField(max_length=40, null=True, blank=True)
objects = UserManager()
自定义模型的序列化器:
class GroupSerializer(serializers.ModelSerializer):
class Meta:
model = Group
fields = ('id', 'name', 'subject', 'user')
还有一个覆盖了create
方法的视图集:
class GroupViewSet(viewsets.ModelViewSet):
serializer_class = GroupSerializer
def create(self, request, *args, **kwargs):
group = group.objects.create(user=self.request.user)
serializer = GroupSerializer(group)
return Response(serializer.data)
调用POST时,会创建一个新的Group
。 Group
与User
有关系,但其他字段(名称,主题)为空。
另一方面,在进行请求序列化时,对象上的User
为空。
def create(self, request, *args, **kwargs):
serializer = GroupSerializer(data=request.data)
if serializer.is_valid():
serializer.save()
return Response(serializer.data, status=status.HTTP_201_CREATED)
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
如何连接这2个使其工作?
答案 0 :(得分:0)
这很有意义,因为您从未使用序列化器对请求进行反序列化,因此无法读取POST请求中传递的详细信息。您可以使用:
def create(self, request, *args, **kwargs):
serializer = GroupSerializer(data=request.data)
if serializer.is_valid():
serializer.save(user=self.request.user)
else:
# return response when the serializer rejects the input
pass
# return a response
pass
在序列化程序中,您将user
字段标记为read_only
,以防止序列化程序在user
不属于请求的情况下失败:
class GroupSerializer(serializers.ModelSerializer):
class Meta:
model = Group
fields = ('id', 'name', 'subject', 'user')
read_only_fields = ('user', )