【问题标题】:Filter into Foreign Keys on Django-Rest Datatables过滤到 Django-Rest 数据表上的外键
【发布时间】:2022-02-07 20:40:23
【问题描述】:

我有一个 Order 模型的数据表,其中包含来自 User 模型的一些字段,并使用以下序列化程序实现

serializers.py

# customer order detail serializer
class CustomerOrderSerializer(serializers.ModelSerializer):
    first_name = serializers.ReadOnlyField(source='user.first_name')
    last_name = serializers.ReadOnlyField(source='user.last_name')

    def __init__(self, *args, **kwargs):
        remove_fields = kwargs.pop('remove_fields', None)
        super(CustomerOrderSerializer, self).__init__(*args, **kwargs)

        if remove_fields:
            for field_name in remove_fields:
                self.fields.pop(field_name)

    class Meta:
        model = Order
        fields = ['id', 'amount', 'order_status', 'created', 'first_name', 'last_name']
        read_only_fields = ['issue_date', 'first_name', 'last_name']

views.py

class OrderList(generics.ListAPIView):
    queryset = Order.objects.order_by('-created')
    serializer_class = CustomerOrderSerializer

我成功地获得了first_namelast_name 字段,如图所示

但是,我的要求是在数据表中过滤/搜索来自不同模型User的字段first_namelast_name

当我尝试过滤这些字段时,我得到以下错误

Cannot resolve keyword 'first_name' into field. Choices are: ..., .., ..., .. 

谁能帮我理解,我们如何过滤 django-rest 数据表中的外键字段

【问题讨论】:

    标签: python django django-models django-rest-framework datatables


    【解决方案1】:

    您可以使用SearchFilter.doc

    from rest_framework import filters
    
    class OrderList(generics.ListAPIView):
        queryset = Order.objects.order_by('-created')
        serializer_class = CustomerOrderSerializer
        filter_backends = [filters.SearchFilter]
        search_fields = ['user__first_name', 'user__last_name']
    

    之后,您可以通过 ?search=foo 查询参数搜索名字和姓氏。

    【讨论】:

    • 解决方案有效,谢谢!
    猜你喜欢
    • 2021-06-25
    • 2014-09-11
    • 2015-04-13
    • 2019-02-12
    • 1970-01-01
    • 2019-10-08
    • 1970-01-01
    • 1970-01-01
    • 2021-06-06
    相关资源
    最近更新 更多