Django REST框架:按当前登录的所有者筛选嵌套对象

Django REST框架:按当前登录的所有者筛选嵌套对象,django,django-rest-framework,Django,Django Rest Framework,我正在尝试按当前授权用户的所有权筛选API响应中的嵌套对象 以下是我的设置: Django 1.8,Django REST框架3 模型 序列化程序 DRF视图 不同的用户可以为同一容器创建通知对象 如果我取消对通知的注释,以获取容器=NotificationSerializerName=True,我将得到: "data": [ { "notifications_for_container": [ { "pk": 11,

我正在尝试按当前授权用户的所有权筛选API响应中的嵌套对象

以下是我的设置: Django 1.8,Django REST框架3

模型 序列化程序 DRF视图 不同的用户可以为同一容器创建通知对象

如果我取消对通知的注释,以获取容器=NotificationSerializerName=True,我将得到:

"data": [
    {
      "notifications_for_container": [
        {
          "pk": 11,
          "owner": 2,
        },
        {
          "pk": 20,
          "owner": 46,
        }
      ],
      "pk": 6,
      "container_title": "TEST CONTAINER",
      "all_items_in_holder": [
        {
          "pk": 12,
          "item_title": "xbox1 from amazon ",
        },
      ]
     }
    ]
无论我当前使用哪个用户登录

我在这里试图实现的是,在API响应的notifications_for_容器部分中只返回所有者的通知

例如,如果我以pk=2的用户身份登录,我应该只获得

"data": [
    {
      "notifications_for_container": [
        {
          "pk": 11,
          "owner": 2,
        }
      ]
...
...
我一直在尝试从实现解决方案,但在/api/containers/'request'处出现了KeyError

我已经尝试解决这个问题两天了,也许我没有看到明显的问题,所以任何帮助都将不胜感激。
提前谢谢

代码的问题似乎是上下文属性没有被当前请求填充。看一看。也许你应该做一些类似的事情:

     serializer = ContainerSerializer(many=True, context={'request': request})
第一:

第二:

def get_current_user_notifications(self, obj):
    user = self.context['request'].user
    # user_notifications  is a queryset
    user_notifications = Notification.objects.filter(item_to_track=obj, owner=user) 
    # so you need add many=True
    serializer = NotificationSerializer(user_notifications, many=True)
    return serializer.data

很难说,语句serializer=NotificationSerializerForItemsHolderuser\u通知包含在哪个文件中?是否可以发布完整的回溯?对不起,我的错误,以下是完整的错误文本:试图获取序列化程序“NotificationSerializer”上字段“owner”的值时,位于/api/containers/get AttributeError的AttributeError。序列化程序字段的名称可能不正确,并且与“QuerySet”实例上的任何属性或键都不匹配。最初的异常文本是:“QuerySet”对象没有属性“owner”。也许您应该尝试将source='owner.pk'更改为source='pk'Nope,这没有帮助。在线serializer=NotificationSerializerForItemsHolderuser_通知上它肯定失败了,但我不明白为什么。我在回溯中得到了这个:列表107中的myproj/api_app/views.py。data=get\u current\u user\u通知101中的new\u serializer.data myproj/api\u app/serializers.py。return serializer.dataTry使用完整回溯更新问题。根据您发布的信息复制问题是一项艰巨的工作,我没有时间,老实说,我有意愿正确地执行此操作,但如果您用它更新您的问题,我可以查看完整的跟踪。
"data": [
    {
      "notifications_for_container": [
        {
          "pk": 11,
          "owner": 2,
        }
      ]
...
...
     serializer = ContainerSerializer(many=True, context={'request': request})
serializer = ContainerSerializer(many=True, context={'request': request})
serializer = ContainerSerializer(many=True, context=self.get_serializer_context())
def get_current_user_notifications(self, obj):
    user = self.context['request'].user
    # user_notifications  is a queryset
    user_notifications = Notification.objects.filter(item_to_track=obj, owner=user) 
    # so you need add many=True
    serializer = NotificationSerializer(user_notifications, many=True)
    return serializer.data