小编oow*_*aee的帖子

将请求上下文从Django Rest Framework中的Viewset传递给序列化程序

我有一种情况,其中序列化器字段的值取决于当前登录用户的身份.我已经看到了在初始化序列化程序时如何将用户添加到上下文中,但是我不确定在使用ViewSet时如何执行此操作,因为您只提供序列化程序类而不是实际的序列化程序实例.

基本上我想知道如何去:

class myModelViewSet(ModelViewSet):
   queryset = myModel.objects.all()
   permission_classes = [DjangoModelPermissions]
   serializer_class = myModelSerializer
Run Code Online (Sandbox Code Playgroud)

至:

class myModelSerializer(serializers.ModelSerializer):
    uploaded_by = serializers.SerializerMethodField()
    special_field = serializers.SerializerMethodField()

    class Meta:
        model = myModel

    def get_special_field(self, obj):
        if self.context['request'].user.has_perm('something.add_something'):
           return something
Run Code Online (Sandbox Code Playgroud)

很抱歉,如果它是不明确的,从文档: 添加额外的Context 它说做

serializer = AccountSerializer(account, context={'request': request})
serializer.data
Run Code Online (Sandbox Code Playgroud)

但我不知道如何从视图集自动执行此操作,因为我只能更改序列化程序类,而不是序列化程序实例本身.

django serializer django-rest-framework

51
推荐指数
2
解决办法
3万
查看次数

如何在Django Rest Framework中为list_route利用内置分页?

我如何使用list_route方法中的分页?我有看法:

class view(mixins.CreateModelMixin,
                mixins.RetrieveModelMixin,  
                viewsets.GenericViewSet):
...
@list_route(methods=['get'])
def some_method(self, request, **kwargs):
    queryset = Model.objects.all()
    serializer = self.get_serializer(queryset, many=True)
    return Response(serializer.data)
Run Code Online (Sandbox Code Playgroud)

python django django-rest-framework

7
推荐指数
1
解决办法
1315
查看次数

Capybara找不到id的元素

我的页面上有以下代码:

<div class="row column filter-tab">
  <div id="filter-button" class="button"><%= fa_icon 'filter' %></div>
</div>
Run Code Online (Sandbox Code Playgroud)

我有一个试图做的rspec测试

page.find('#filter-button').click
Run Code Online (Sandbox Code Playgroud)

我收到了可怕的

 Capybara::ElementNotFound:
   Unable to find css "#filter-button"
Run Code Online (Sandbox Code Playgroud)

如果我在测试中放置断点,我可以检查HTML并看到元素存在,并且我能够与它进行交互.

(byebug) page.has_css?('#filter-button', visible: false)
    false
Run Code Online (Sandbox Code Playgroud)

以及

$('#filter-button')
Object { length: 1, context: HTMLDocument ? moves, selector: "#filter-button", 1 more… }
Run Code Online (Sandbox Code Playgroud)

我开始没有想法了.我唯一能想到的是,这个按钮位于一个容器内,在页面加载后通过javascript定位(只是通过增加顶部CSS值) - 但即便如此,我认为它仍然可以在页面然后显示:false/visible:all.

rspec capybara

5
推荐指数
1
解决办法
2204
查看次数