我正在尝试调用 serlizerer 从 View 集中保存对象 这是views.py
class GroupViewSet(viewsets.ViewSet):
....
@detail_route(methods=['post'], url_path='task')
def get_task(self, request, pk=None):
group = get_object_or_404(Group, pk=pk)
data = {"group": group }
log_serializer = LogSerializer(data=data)
if log_serializer.is_valid(raise_exception=True):
log_serializer.save()
这是序列化器.py
class GroupSerializer(serializers.ModelSerializer):
class Meta:
model = Group
fields = ('id', 'name')
class LogSerializer(serializers.ModelSerializer):
group = GroupSerializer()
class Meta:
model = Log
fields = ('group', 'created')
这是模型.py:
class Group:
....
class Log(models.Model):
user = models.ForeignKey(User)
group = models.ForeignKey(Server) #Not the group of user , it is the group id which user try to query
created = models.DateTimeField(auto_now_add=True)
帖子回复;
{
"group": {
"non_field_errors": [
"Invalid data. Expected a dictionary, but got group."
]
}
}
最佳答案
根据您的 LogSerializer,当您将数据属性传递给序列化器时,它需要一个如下所示的字典:
{
// note this is a dictionary or a JSON Object.
// id is omitted because it's auto-inserted natural key
{
'name': 'group-name'
},
'created': '2017-11-06 20:17:59'
}
但是,您传递了一个组实例,您可以从这里获取:group = get_object_or_404(Group, pk=pk)
因此,当您调用 .is_valid
时,会引发异常.
假设您尝试使用组外键创建日志对象,对于现有组,快速破解将替换 data = {"group": group }
与 data = {"group": group.__dict__ }
关于python - Django Rest框架serializer.save()返回 "Invalid data. Expected a dictionary, but got group",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47137382/