【问题标题】:Django super function does't add variable to classDjango超级函数不会向类添加变量
【发布时间】:2023-03-04 13:44:01
【问题描述】:

我正在尝试使用 init 在 MozSerializer 类中创建新变量,以获取从另一个函数传递的数据。下面是代码:

class MozSerializer(serializers.Serializer):

    def __init__(self, modelid, data=None):        
        self.modelid = modelid        
        super(MozSerializer, self).__init__(modelid=self.modelid)

    keyword = serializers.PrimaryKeyRelatedField(queryset=modelid.objects.all())
    pda = serializers.FloatField()
    upa = serializers.FloatField()

我的目标是将这个“modelid”从另一个函数传递给序列化程序(第 7 行...queryset=MODELID...)。

【问题讨论】:

    标签: python django django-rest-framework django-serializer


    【解决方案1】:

    正确的做法是在__init__ 中添加字段dynamically

    class MozSerializer(serializers.Serializer):
    
        def __init__(self, *args, **kwargs):        
            modelid = kwargs.pop('modelid')
            self.fields['keyword'] = serializers.PrimaryKeyRelatedField(\
                                                 queryset=modelid.objects.all())       
            super(MozSerializer, self).__init__(*args, **kwargs)
    
        pda = serializers.FloatField()
        upa = serializers.FloatField()
    

    【讨论】:

    • 干杯,我确定我做错了什么,但如果我把它留在 MozSerializer 类中:keyword = serializers.PrimaryKeyRelatedField(queryset=modelid.objects.all()) 我得到错误,modelid 仍然不是定义。当我打印 kwargs 它返回: {'data': {'keyword': 38, u'pda': 23.67342552652728, u'upa': 12.884365610400714}} 虽然我认为它应该只返回模型名称(Url2)跨度>
    • 从您尝试使用modelid 的方式来看,我了解到它实际上是一个模型类。如果是这种情况,您还没有在kwargs 中传递它。当您实例化您的序列化程序时,它应该类似于MozSerializer(data=data, modelid=SomeModel)
    • 在我通过之前是:type(modelid) -
    • 您是否删除了旧的keyword = serializers.PrimaryKeyRelatedField(queryset=modelid.objects.all())?我编辑了我的示例以包含整个类定义。
    • 两种方法都试过了,如果我不删除它,那么它会给出“未定义模型”错误。如果将其删除,则函数将运行低谷,但不会将数据保存到模型中。可能是因为下面的save()函数也需要modelid: def save(self):keyword = self.validated_data['keyword'] pda = self.validated_data['pda'] upa = self.validated_data['upa'] modelid.objects .update(pda=pda, upa=upa)
    猜你喜欢
    • 2011-09-30
    • 1970-01-01
    • 1970-01-01
    • 2015-02-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多