目标:能够向filter_fields添加_id属性
我试图将名为title的属性的值存储在一个名为_id的属性中,该属性与_id输入相同,只是小写,没有空格,但我尝试过实例化它的to_representation()。
当我试图将_id添加到我的filter_fields时,我在下面得到错误,删除它并运行它,但是我需要属性_id
filter_fields = ('title', '_id',) <--- the _id cause the errTypeError: 'Meta.fields' contains fields that are not defined on this FilterSet: _idmodels.py
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来实例化它的地方
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 dataapi.py
class PortfolioList(ListAPIView):
queryset = Portfolio.objects.all()
serializer_class = PortfolioSerializer
filter_backends = (DjangoFilterBackend,)
filter_fields = ('title', '_id',)发布于 2020-03-12 11:34:27
您需要注释您的查询集,因为_id不是模型的一部分。只应在收到_id字段时在query_params中进行注释。
更好的解决方案是实现自定义过滤器后端。
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 querysethttps://stackoverflow.com/questions/60646935
复制相似问题