我刚开始在DRF编码,我遇到了一个问题,我必须从相关的外键搜索。
我有2个模型,BookDetails和BookCopies。
BookCopies将BookDetails作为外键引用。
现在我想使用模型BookDetails中的属性标题搜索BookCopies。
我使用了django_rest_framework_filters,但是当我访问http://localhost:8000/book/copy/?book_details__title=abc时出现错误。
SELECT * FROM Customers WHERE City IN ('Paris','Berlin','Mannheim','London') AND CustomerID BETWEEN 10 AND 20
查看
class BookFilter(FilterSet):
class Meta:
model = BookDetail
fields = {
'title': ['exact', 'in', 'startswith'],
'author': ['exact', 'in', 'startswith'],
'editor': ['exact', 'in', 'startswith'],
'publisher': ['exact', 'in', 'startswith'],
'cl_num': ['exact', 'in', 'startswith']
}
class CopyFilter(FilterSet):
book_details = RelatedFilter(BookFilter, name="title", queryset=BookDetail.objects.all())
class Meta:
model = BookCopy
fields = {
'ref_id': ['exact', 'in', 'startswith']
}
Serializer
class CopyListAPIView(ListAPIView):
serializer_class = CopyViewSerializer
queryset = BookCopy.active_objects.all()
filter_backends = [DjangoFilterBackend]
filter_class = CopyFilter
错误跟踪
class CopyViewSerializer(ModelSerializer):
class Meta:
model = BookCopy
fields = "__all__"
请帮助。谢谢
答案 0 :(得分:0)
要获得所需的行为,您需要在模型中提供等于name
的{{1}}参数。默认情况下,它等于FilterSet中的字段名称。因此,如果是related_name
,您可以跳过它。
book_details
顺便说一下,你的错误堆栈中没有堆栈。