【发布时间】:2014-02-03 17:57:53
【问题描述】:
在我的应用中,用户有一堵墙,类似于旧的 Facebook 墙。一个用户可以在其他用户的墙上发布 cmets。我有一个基本结构如下的序列化程序:
class UserWallCommentSerializer(serializers.ModelSerializer):
class Meta:
model = UserWallComment
fields = ('uid', 'uidcommenter', 'idwall', 'created', 'description')
read_only_fields = ('uid', 'uidcommenter', 'idwall', 'created')
uid 和 uidcommenter 是用户模型的外键,idwall 是 PK,description 是评论本身。
创建/编辑评论时,需要后端设置uid 和uidcommenter。不允许用户更改这些字段。
假设我有变量 uid 和 uidcommenter 在我的视图中调用序列化程序 - 我如何将这些变量传递给序列化程序以便创建 UserWallComment?
我尝试使用SerializerMethodField 设置uid 和uidcommenter(在上下文变量中传递PK),但数据库显示我传递的是NULL PK:
class UserWallCommentSerializer(serializers.ModelSerializer):
uid = serializers.SerializerMethodField('setUid')
class Meta:
model = UserWallComment
fields = ('uid', 'uidcommenter', 'idwall', 'created', 'description')
read_only_fields = ('uidcommenter', 'idwall', 'created')
def setUid(self):
return self.context['uid']
我的查看码(idwall是墙的pk):
class MemberWall(APIView):
def post(self, request, requestUid, idwall):
uid = request.user.uid
serializer = UserWallCommentSerializer(data=request.DATA, context={'uid': requestUid, 'uidcommenter': uid})
if serializer.is_valid():
serializer.save()
return Response(serializer.data['uid'], status=status.HTTP_201_CREATED)
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
【问题讨论】:
-
您使用的是 DRF 的通用视图吗?可以发一下查看代码吗?
-
OFC!我已经发布了post的视图代码。
标签: python django serialization django-rest-framework