首页 > 解决方案 > Django Rest Framework - 过滤数据的问题

问题描述

在我的模型中,我有 Book 和 Author 与 M2M 关系。

models.py

from django.db import models


from django.db import models


class Book(models.Model):
    title          = models.CharField(max_length=200)
    published_date = models.DateField(auto_now_add=False)
    categories     = models.CharField(max_length=300, null=True, blank=True)
    average_rating = models.FloatField(null=True, blank=True)
    ratings_count  = models.IntegerField(null=True, blank=True)
    thumbnail      = models.URLField(null=True, blank=True)

def authors(self):
    return self.author_set.all()

def __str__(self):
    return f'title: {self.title} \n' \
           f'date of publication: {self.published_date}'


class Author(models.Model):
    name  = models.CharField(max_length=200)
    books = models.ManyToManyField(Book)

    def __str__(self):
        return str(self.name)

在我的序列化程序中,我从def authorsmodels.py 中获取作者

serializers.py
    class Meta:
        model = Author
        fields = ['name']


class BookSerializer(serializers.ModelSerializer):
    authors = AuthorSerializer(many=True)

    class Meta:
        model = Book
        fields = [
            'authors',
            'title',
            'published_date',
            'categories',
            'average_rating',
            'ratings_count',
            'thumbnail'
        ]

所以在views.py中我想按作者过滤书籍

views.py
class BooksListAPIView(generics.ListAPIView):
    queryset = Book.objects.all()
    serializer_class = BookSerializer
    filter_backends = (filters.OrderingFilter, DjangoFilterBackend)
    filter_fields = ['published_date', 'authors']
    ordering_fields = ['published_date']

但它给了我这个错误

'Meta.fields' must not contain non-model field names: authors 

知道如何过滤作者的数据,以便提取给定作者的书籍。我想选择过滤器。提前致谢。

标签: djangodjango-rest-frameworkdjango-filter

解决方案



推荐阅读