我正试图调用serlizer从视图集中保存对象 这是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')
这是model.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,当您将数据属性传递给序列化程序时,它需要这样的字典:
但是,您传递了一个组实例,从这里可以得到:
group = get_object_or_404(Group, pk=pk)
,因此在调用.is_valid
时会引发异常。假设您试图用组外键创建一个日志对象,对于一个现有组,一个快速的方法将
data = {"group": group }
替换为data = {"group": group.__dict__ }
相关问题 更多 >
编程相关推荐