Django-filter: تصفية ArrayField

تم إنشاؤها على ٢٤ أغسطس ٢٠١٦  ·  4تعليقات  ·  مصدر: carltongibson/django-filter

هل من الممكن تصفية الحقول المحددة في django.contrib.postgres.fields مثل ArrayField ؟

التعليق الأكثر فائدة

لا يحتوي django-filter حاليًا على أي مرشحات متوافقة مع حقول مساهمة postgres - ستحتاج إلى إنشاء مرشحات خاصة بك. سيكون الأمر أكثر أو أقل صعوبة اعتمادًا على ما تحاول القيام به. سيكون دعم عمليات البحث المخصصة لـ ArrayField تافهًا إلى حد ما:

class CharArrayFilter(filters.BaseCSVFilter, filters.CharFilter):
     pass

class MyFilterSet(filters.FilterSet):
    tags__contains = CharArrayFilter(name='tags', lookup_expr='contains')

    class Meta:
        model = SomethingTaggable
GET http://localhost/api/something-taggable?tags__contains=a,b,c

سيقوم المرشح أعلاه بالتحقق من صحة المدخلات المفصولة بفواصل وإرجاع قائمة بالقيم التي تم تنظيفها ، والتي تكون مناسبة للمكالمة الأساسية .filter() .

من ناحية أخرى ، يعد التعامل مع تحويلات الفهرس والشريحة أكثر تعقيدًا ، وهي غير منظمة ولها عدد لا حصر له من التوليفات نظريًا.

ال 4 كومينتر

لا يحتوي django-filter حاليًا على أي مرشحات متوافقة مع حقول مساهمة postgres - ستحتاج إلى إنشاء مرشحات خاصة بك. سيكون الأمر أكثر أو أقل صعوبة اعتمادًا على ما تحاول القيام به. سيكون دعم عمليات البحث المخصصة لـ ArrayField تافهًا إلى حد ما:

class CharArrayFilter(filters.BaseCSVFilter, filters.CharFilter):
     pass

class MyFilterSet(filters.FilterSet):
    tags__contains = CharArrayFilter(name='tags', lookup_expr='contains')

    class Meta:
        model = SomethingTaggable
GET http://localhost/api/something-taggable?tags__contains=a,b,c

سيقوم المرشح أعلاه بالتحقق من صحة المدخلات المفصولة بفواصل وإرجاع قائمة بالقيم التي تم تنظيفها ، والتي تكون مناسبة للمكالمة الأساسية .filter() .

من ناحية أخرى ، يعد التعامل مع تحويلات الفهرس والشريحة أكثر تعقيدًا ، وهي غير منظمة ولها عدد لا حصر له من التوليفات نظريًا.

شكرا على المعلومات.

سأغلق هذا على أنه خارج النطاق في الوقت الحالي. يسعدني النظر في طلبات السحب الموثقة والمختبرة. قد تكون لدينا القدرة على إعادة النظر في المستقبل.

تحديث:
تمت إعادة تسمية المعلمة name إلى field_name لذا يجب أن يبدو MyFilterSet كما يلي:

class MyFilterSet(filters.FilterSet):
    tags__contains = CharArrayFilter(field_name='tags', lookup_expr='contains')

    class Meta:
        model = SomethingTaggable
هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات