Python Django Rest框架相关字段筛选

Python Django Rest框架相关字段筛选,python,django,django-rest-framework,Python,Django,Django Rest Framework,我刚开始用DRF编码,我遇到了一个问题,我必须从相关外键进行搜索 我有两个模型,图书资料和复印件 BookCopies将BookDetails作为外键在其中引用 现在我想使用模型BookDetails中的属性title搜索BookCopy 我使用了django_rest_framework_过滤器,如下所示,但当我访问时,它会给出一个错误 看法 序列化程序 class CopyViewSerializer(ModelSerializer): class Meta: mod

我刚开始用DRF编码,我遇到了一个问题,我必须从相关外键进行搜索

我有两个模型,图书资料和复印件

BookCopies将BookDetails作为外键在其中引用

现在我想使用模型BookDetails中的属性title搜索BookCopy

我使用了django_rest_framework_过滤器,如下所示,但当我访问时,它会给出一个错误

看法

序列化程序

class CopyViewSerializer(ModelSerializer):
    class Meta:
        model = BookCopy
        fields = "__all__"
错误跟踪

KeyError at /book/copy/
'book_details__title'
Request Method: GET
Request URL:    http://localhost:8000/book/copy/?book_details__title=abc
Django Version: 1.10.5
Exception Type: KeyError
Exception Value:    
'book_details__title'
Exception Location: /Applications/MAMP/htdocs/python/01-virtual-env/lib/python2.7/site-packages/django_filters/filterset.py in qs, line 335
Python Executable:  /Applications/MAMP/htdocs/python/01-virtual-env/bin/python
Python Version: 2.7.10
Python Path:    
['/Applications/MAMP/htdocs/library-new/services',
 '/Applications/MAMP/htdocs/python/01-virtual-env/lib/python27.zip',
 '/Applications/MAMP/htdocs/python/01-virtual-env/lib/python2.7',
 '/Applications/MAMP/htdocs/python/01-virtual-env/lib/python2.7/plat-darwin',
 '/Applications/MAMP/htdocs/python/01-virtual-env/lib/python2.7/plat-mac',
 '/Applications/MAMP/htdocs/python/01-virtual-env/lib/python2.7/plat-mac/lib-scriptpackages',
 '/Applications/MAMP/htdocs/python/01-virtual-env/lib/python2.7/lib-tk',
 '/Applications/MAMP/htdocs/python/01-virtual-env/lib/python2.7/lib-old',
 '/Applications/MAMP/htdocs/python/01-virtual-env/lib/python2.7/lib-dynload',
 '/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7',
 '/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/plat-darwin',
 '/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib-tk',
 '/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/plat-mac',
 '/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/plat-mac/lib-scriptpackages',
 '/Applications/MAMP/htdocs/python/01-virtual-env/lib/python2.7/site-packages',
 '/Applications/MAMP/htdocs/python/01-virtual-env/lib/python2.7/site-packages/Django-1.10.5-py2.7.egg',
 '/Applications/MAMP/htdocs/python/01-virtual-env/lib/python2.7/site-packages/MySQL_python-1.2.5-py2.7-macosx-10.12-intel.egg']
Server time:    Tue, 24 Jan 2017 13:35:36 +0000

请帮忙。谢谢

要获得所需的行为,您需要在模型中提供等于
相关名称
参数。默认情况下,它等于FilterSet中的字段名。因此,如果是
book\u details
,您可以跳过它

class CopyFilter(FilterSet):
    book_details = RelatedFilter(BookFilter, name="book_details", queryset=BookDetail.objects.all()

顺便说一下,您的错误堆栈中没有堆栈。

您可以发布错误回溯吗?还可以提供您正在使用的视图吗?您好,非常抱歉,我回复有点晚。我用错误回溯和我使用的视图更新了问题我尝试了它。没用。同样的问题。在我看来,我是这样做的。def get_queryset(self):并使用它来执行我想要的自定义过滤
KeyError at /book/copy/
'book_details__title'
Request Method: GET
Request URL:    http://localhost:8000/book/copy/?book_details__title=abc
Django Version: 1.10.5
Exception Type: KeyError
Exception Value:    
'book_details__title'
Exception Location: /Applications/MAMP/htdocs/python/01-virtual-env/lib/python2.7/site-packages/django_filters/filterset.py in qs, line 335
Python Executable:  /Applications/MAMP/htdocs/python/01-virtual-env/bin/python
Python Version: 2.7.10
Python Path:    
['/Applications/MAMP/htdocs/library-new/services',
 '/Applications/MAMP/htdocs/python/01-virtual-env/lib/python27.zip',
 '/Applications/MAMP/htdocs/python/01-virtual-env/lib/python2.7',
 '/Applications/MAMP/htdocs/python/01-virtual-env/lib/python2.7/plat-darwin',
 '/Applications/MAMP/htdocs/python/01-virtual-env/lib/python2.7/plat-mac',
 '/Applications/MAMP/htdocs/python/01-virtual-env/lib/python2.7/plat-mac/lib-scriptpackages',
 '/Applications/MAMP/htdocs/python/01-virtual-env/lib/python2.7/lib-tk',
 '/Applications/MAMP/htdocs/python/01-virtual-env/lib/python2.7/lib-old',
 '/Applications/MAMP/htdocs/python/01-virtual-env/lib/python2.7/lib-dynload',
 '/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7',
 '/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/plat-darwin',
 '/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib-tk',
 '/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/plat-mac',
 '/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/plat-mac/lib-scriptpackages',
 '/Applications/MAMP/htdocs/python/01-virtual-env/lib/python2.7/site-packages',
 '/Applications/MAMP/htdocs/python/01-virtual-env/lib/python2.7/site-packages/Django-1.10.5-py2.7.egg',
 '/Applications/MAMP/htdocs/python/01-virtual-env/lib/python2.7/site-packages/MySQL_python-1.2.5-py2.7-macosx-10.12-intel.egg']
Server time:    Tue, 24 Jan 2017 13:35:36 +0000
class CopyFilter(FilterSet):
    book_details = RelatedFilter(BookFilter, name="book_details", queryset=BookDetail.objects.all()