我正在尝试调用 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()
这是serializer.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 时会引发异常.
假设您正在尝试使用 Group 外键创建一个 Log 对象,对于现有的 Group,快速破解将替换 data = {"group": group }与 data = {"group": group.__dict__ }
