Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ssh/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Django to_表示和过滤器_字段错误:TypeError:';元字段';_Python_Django_Django Models_Django Rest Framework_Django Filter - Fatal编程技术网

Python Django to_表示和过滤器_字段错误:TypeError:';元字段';

Python Django to_表示和过滤器_字段错误:TypeError:';元字段';,python,django,django-models,django-rest-framework,django-filter,Python,Django,Django Models,Django Rest Framework,Django Filter,目标:能够将_id属性添加到筛选字段中 我试图将名为title的属性的值存储在名为_id的属性中,该属性的输入与title相同,只是小写,没有空格,simple replace(),但我尝试将其实例化为_representation() 当我尝试将_id添加到我的筛选字段时,我会得到下面的错误,将其删除并运行,但我需要添加属性_id filter_fields = ('title', '_id',) <--- the _id cause the err 型号.py 课程组合(models

目标:能够将_id属性添加到筛选字段中

我试图将名为title的属性的存储在名为_id的属性中,该属性的输入与title相同,只是小写,没有空格,simple replace(),但我尝试将其实例化为_representation()

当我尝试将_id添加到我的筛选字段时,我会得到下面的错误,将其删除并运行,但我需要添加属性_id

filter_fields = ('title', '_id',) <--- the _id cause the err
型号.py

课程组合(models.Model):
已创建_at=models.DateTimeField()
title=models.CharField(最大长度=255)
description=models.TextField()
link=models.CharField(最大长度=300)
img=models.CharField(最大长度=255)
定义(自我):
返回自己的标题
serializer.py在这里,我试图通过重写到_representation()

类PortfolioSerializer(serializers.ModelSerializer): 类元: 模型=投资组合 字段=('created_at','title','description','link','img',) def到_表示(自身、实例): data=super().到_表示(实例) 数据['''u id']=instance.title.lower().replace(“,”) 返回数据 api.py

class PortfolioList(ListAPIView):
queryset=Portfolio.objects.all()
serializer_class=PortfolioSerializer
过滤器\后端=(DjangoFilterBackend,)
筛选器_字段=('title','_id',)

您需要对查询集进行注释,因为
\u id
不是模型的一部分。只有在收到
query\u参数中的
\u id
字段时,才应进行注释

更好的解决方案是实现自定义过滤器后端

    class PortfolioCustomFilterBackend(filters.BaseFilterBackend):

        def filter_queryset(self, request, queryset, view):
            _id = self.request.query_params.get('_id', None)
            if _id is not None:
                title = _id.replace('_', ' ')
                queryset = queryset.filter(title__iexact=title)
            return queryset

这里的
\u id
是什么?\u id将与title相同,只是小写,没有空格,因此title是Hello World,\u id将是>“Hello\u World”。过滤过程在ORM/DB级别执行。在过滤过程之前,必须对查询集进行注释。为此,请重写视图类的
get\u queryset()
方法。感谢我对Django非常陌生,这会出现在我的模型、序列化程序或api中吗?这应该出现在视图中(PortfolioList)。在您的
filter\u backends
元组中添加自定义筛选器类。我在filter\u查询方法“PortfolioCustomFilterBackend”对象中的request参数中得到了该类。对象没有属性“request”任何线索?
    class PortfolioCustomFilterBackend(filters.BaseFilterBackend):

        def filter_queryset(self, request, queryset, view):
            _id = self.request.query_params.get('_id', None)
            if _id is not None:
                title = _id.replace('_', ' ')
                queryset = queryset.filter(title__iexact=title)
            return queryset