当前位置: 首页 > 面试题库 >

将额外的参数传递给Django Rest Framework中的Serializer类

沈华晖
2023-03-14
问题内容

我想将一些参数从Viewset传递给DRF Serializer类,因此我已经尝试过:

class OneZeroSerializer(rest_serializer.ModelSerializer):

    def __init__(self, *args, **kwargs):
        print args # show values that passed

    location = rest_serializer.SerializerMethodField('get_alternate_name')

    def get_alternate_name(self, obj):
        return ''


    class Meta:
        model = OneZero

        fields = ('id', 'location')

观看次数

class OneZeroViewSet(viewsets.ModelViewSet):

   serializer_class = OneZeroSerializer(realpart=1)
   #serializer_class = OneZeroSerializer

   queryset = OneZero.objects.all()

基本上,我想将基于查询字符串的一些值从视图传递给Serializer类,然后将它们分配给字段。

这些字段实际上不包含在“模型”中,而是动态创建的字段。

这个问题stackoverflow中的情况相同,但我无法理解答案。

在这种情况下,任何人都可以帮助我或为我提供更好的选择。


问题答案:

对于“ ModelSerializer”构造函数,使用“上下文” arg非常简单。

例如:

鉴于:

my_objects = MyModelSerializer(
    input_collection, 
    many=True, 
    context={'user_id': request.user.id}
).data

在序列化器中:

class MyModelSerializer(serializers.ModelSerializer):
...

    is_my_object = serializers.SerializerMethodField('_is_my_find')
...

    def _is_my_find(self, obj):
        user_id = self.context.get("user_id")
        if user_id:
            return user_id in obj.my_objects.values_list("user_id", flat=True)
        return False
...

因此您可以使用“ self.context”获取额外的参数。



 类似资料:
  • 问题内容: 我有以下功能。WordPress功能,但这实际上是一个PHP问题。它们根据每个对象的元数据中的属性对我的对象进行排序。 我想在第一个函数中传递一个字符串。这将使我可以重复使用此代码,因为我可以将其应用于各种元数据属性。 但是我不明白如何将 额外的 参数传递给usort回调。我试图制作一个JS风格的匿名函数,但是服务器上的PHP版本太旧,并引发了语法错误。 非常感谢您提供的任何帮助-或将

  • 问题内容: 在我的 JSF 2.0 (在 JBoss AS 7上 )项目中,我希望在我的Ajax提交的表单上显示一个在开始和完成阶段触发的小图标状态,以使最终用户知道仍有事情发生。 该primefaces是没有用在这里,因为我想有在我的网页不同的地方很多不同的图标。 我在此问题中找到了一些解决方案:“如何在同一输入中显示不同的ajax状态?”,但是我仍然有一个问题:为了使我的javascript函

  • 问题内容: 我有一个函数,将回调函数作为参数,并用一个参数调用它。 我还有一个带有两个参数的函数:和。 我想将函数作为参数传递给,但我也想作为第二个参数()传递给。我怎样才能做到这一点? 问题答案: 只需创建一个包装回调: 或使用ECMAScript 6箭头功能:

  • 问题内容: 我需要将一个额外的参数传递给jquery ajax调用的promise回调: 标准回调如下所示: 但是我需要将一个额外的参数传递给我的回调,如下所示: 我该怎么做? 注意:这个问题不是重复的,因为它是关于promise回调的。此外,这个问题比据说重复的问题大了两年,并且给出了更为彻底的答案,以及关于诺言的具体答案。 问题答案: 我发现包括一个新的间接级别真的很容易,就像这样: 这样,除

  • 我有一个简单的 Servlet 应用程序的安全部分,我需要将参数传递给我的应用程序的安全部分。 流量: 第三方需要使用我的登录机制(简单的安全servlet) 用户尝试转到: mycompany.com/loginApp/login?pref=1 “/login”url是安全的,因此应用程序服务器告诉浏览器重定向到我的登录名.jsp,但此时URL更新为:mycompany.com/loginApp

  • 问题内容: 我正在使用Go内置的http服务器,并拍拍来响应一些URL: 我需要向该处理函数传递一个额外的参数-一个接口。 如何向处理程序函数发送额外的参数? 问题答案: 通过使用闭包,您应该能够做您想做的事情。 更改为以下内容(未测试): 然后对