class OrderFilter(django_filters.FilterSet):
class Meta:
model = Order
fields = {
'status': ['exact',],
'client': ['icontains',],
}
class OrderViewset(viewsets.ModelViewSet):
filter_class = OrderFilter
permission_classes = ( permissions.IsAuthenticated, )
serializer_class = OrderSerializer
queryset = Order.objects.all()
filter_backends = (
filters.OrderingFilter,
filters.SearchFilter,
filters.DjangoFilterBackend
)
ordering_fields = ('added_at', 'status', 'client', 'order_number')
ordering = ('-added_at',)
class Order(models.Model):
order_number = models.CharField(max_length=255, default='')
client = models.CharField(max_length=255, default='')
status = models.CharField(max_length=255, default='')
added_at = models.DateTimeField(auto_now_add=True)
يتم تجاهل عامل تصفية العميل بشكل أساسي. إذا قمت باستبدال icontains بدقة ، فإنه يعمل.
لكن لا يمكنني الحصول على محتويات أو عناصر للعمل في أي مجال.
Requirements.txt:
جانغو == 1.10.4
psycopg2 == 2.6.2
djangorestframework == 3.5.3
القنوات == 1.0.0
djangorestframework-jwt == 1.9.0
مرشح django == 1.0.1
asgi-redis == 1.0.0
دافني == 1.0.0
مرحباxtrinch.
من الوصف لا يمكنني رؤية مشكلة. هل يمكنني أن أنصحك بمحاولة وضع نقطة توقف في ملكيتك FilterSet
's qs
وتخطي لمعرفة ما يحدث.
إذا كان بإمكانك تضييقها إلى حالة اختبار بسيطة ، فسيكون ذلك مفيدًا أيضًا.
يأخذ Filter
القيمة فقط وينشئ بحثًا عن ORM ، لذا فإن السؤال هو ، أين يحدث هذا الخطأ؟ _
مرحبًا xtrinch - هل يمكنك نشر نموذج URL مع معلمات الاستعلام؟ أعتقد أنك تستعلم عن /api/orders?status=foo
بدلاً من /api/orders?status__icontains=foo
. توجد ملاحظة في مستندات Meta.fields
تشرح السلوك المختلف قليلاً لعمليات البحث عن exact
.
rpkilby شكرا. كنت أتصور أن العنصر الأول في المصفوفة يصبح المرشح الافتراضي - أرى أنني كنت مخطئًا :)
منشورك مفيد جدا بالنسبة لي في مشروعي
شكرا
التعليق الأكثر فائدة
مرحبًا xtrinch - هل يمكنك نشر نموذج URL مع معلمات الاستعلام؟ أعتقد أنك تستعلم عن
/api/orders?status=foo
بدلاً من/api/orders?status__icontains=foo
. توجد ملاحظة في مستنداتMeta.fields
تشرح السلوك المختلف قليلاً لعمليات البحث عنexact
.