首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Django to_representation和filter_fields err: TypeError:'Meta.fields‘

Django to_representation和filter_fields err: TypeError:'Meta.fields‘
EN

Stack Overflow用户
提问于 2020-03-12 02:47:49
回答 1查看 205关注 0票数 0

目标:能够向filter_fields添加_id属性

我试图将名为title的属性的存储在一个名为_id的属性中,该属性与_id输入相同,只是小写,没有空格,但我尝试过实例化它的to_representation()。

当我试图将_id添加到我的filter_fields时,我在下面得到错误,删除它并运行它,但是我需要属性_id

代码语言:javascript
复制
filter_fields = ('title', '_id',) <--- the _id cause the err
代码语言:javascript
复制
TypeError: 'Meta.fields' contains fields that are not defined on this FilterSet: _id

models.py

代码语言:javascript
复制
class Portfolio(models.Model):
    created_at = models.DateTimeField()
    title = models.CharField(max_length=255)
    description = models.TextField()
    link = models.CharField(max_length=300)
    img = models.CharField(max_length=255)

    def __str__(self):
        return self.title

这里是我试图通过重写serializer.py来实例化它的地方

代码语言:javascript
复制
class PortfolioSerializer(serializers.ModelSerializer):
    class Meta:
        model = Portfolio
        fields = ('created_at', 'title', 'description', 'link', 'img', )

    def to_representation(self, instance):
        data = super().to_representation(instance)
        data['_id'] = instance.title.lower().replace(" ", "_")
        return data

api.py

代码语言:javascript
复制
class PortfolioList(ListAPIView):
    queryset = Portfolio.objects.all()
    serializer_class = PortfolioSerializer
    filter_backends = (DjangoFilterBackend,)
    filter_fields = ('title', '_id',)
EN

回答 1

Stack Overflow用户

发布于 2020-03-12 11:34:27

您需要注释您的查询集,因为_id不是模型的一部分。只应在收到_id字段时在query_params中进行注释。

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

代码语言:javascript
复制
    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
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60646935

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档