如何在序列化器中使用自定义变量?

时间:2017-10-07 12:13:36

标签: python django django-rest-framework

我想创建一个使用模型中变量的序列化程序,并计算在表中找到相同id的数据量。

我创建了这个,但它不起作用:

class WebsiteSerializer(serializers.Serializer):
    item_nr = serializers.IntegerField()

    class Meta:
        model = URL
        fields = (
            "id",
            "item",
            "status",
            "item_nr "
        )

    def get_item_nr (self, obj):
        obj.item_nr = Items.objects.filter(item_id=self.context.get(id)).count()
        return obj.item_nr 

这是我得到的错误:

  

尝试获取字段item_nr的值时出现AttributeError   在序列化程序WebsiteSerializer上。序列化程序字段可能已命名   错误且不匹配URL实例上的任何属性或键。   原始异常文本是:'URL'对象没有属性'item_nr'。

1 个答案:

答案 0 :(得分:1)

items_nr将是SerializerMethodField而不是IntegerField 系统会根据您在get_item_nr中返回的内容自动分配数据类型。

class WebsiteSerializer(serializers.Serializer):
    item_nr = serializers.SerializerMethodField()

    class Meta:
        model = URL
        fields = (
            "id",
            "item",
            "status",
            "item_nr "
        )

    def get_item_nr (self, obj):
        obj.item_nr = Items.objects.filter(item_id=self.context.get(id)).count()
        return obj.item_nr