Django-filter: FilterSet الحقل الذي تم حله "صورة" مع بحث "دقيق" لنوع حقل غير معروف نوع الحقل ImageField ...

تم إنشاؤها على ٢٤ يوليو ٢٠١٧  ·  11تعليقات  ·  مصدر: carltongibson/django-filter

أهلا!
أعلم أنه تمت معالجة هذه المشكلة هنا بالفعل ، لكن لا يمكنني العثور على حل مناسب.

لدي نموذج به فئة Store تحتوي على معلومات متنوعة حول متاجر مختلفة ويتضمن أيضًا حقلاً به image = Models.ImageField لعرضه عند الاستعلام عنه.

لقد جربت كل شيء من المستندات ، ولكن يبدو أنه يتجاهل الاستثناء الخاص بي وكذلك الحقول التي أقوم بالترشيح من أجلها

class StoreFilter(django_filters.FilterSet):
    class Meta:
        model = Store
        exclude = ['image']
        fields = {
            'name': ['exact', 'contains'],
            'created': ['exact', 'year__gt'],
        }

هذا ما أحاول التصفية من أجله ويستمر في إلقاء خطأ التأكيد هذا ، أي فكرة عما قد أفتقده؟ بمجرد أن أعلق على سطر الصورة في Models.py الخاص بي ، فإنه يعمل (لكنه يعرض جميع الحقول ، وليس فقط الاسم والتكوين الذي كنت أقوم بترشيحه من أجله. سيكون موضع تقدير أي مؤشرات.

مع أطيب التحيات

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

مرحبًا msbt - أراهن على ترك بعض المعلومات هنا. أجريت اختبارًا سريعًا ، ولم يتم جمع AssertionError المذكور. كما ترى أدناه ، لم يتم إنشاء أي فلتر لحقول الصورة.

"" الثعبان

عارضات ازياء

من نماذج الاستيراد django.db

متجر فئة (طرازات. نموذج):
الاسم = النماذج. CharField (max_length = 80)
تم الإنشاء = Models.DateField ()
الصورة = النماذج.

المرشحات

استيراد django_filters

فئة StoreFilter (django_filters.FilterSet):
فئة ميتا:
النموذج = مخزن
استبعاد = ['صورة']
الحقول = {
'الاسم': ['دقيق'، 'يحتوي على']،
"تم إنشاؤه": ["دقيق"، "year__gt"]،
}

إخراج وحدة التحكم

في [8]: StoreFilter.base_filters
خارج [8]:
OrderedDict ([('name'،) ،
("name__contains" ،) ،
('خلقت'،) ،
('تم إنشاؤه__year__gt' ،)])
""

هل يمكنك تقديم النموذج الكامل ورمز الفلتر؟ إذا لم يكن الأمر كذلك ، فسيكون من المفيد استخدام مثال مقطر يوضح المشكلة.

ال 11 كومينتر

مرحبًا msbt - أراهن على ترك بعض المعلومات هنا. أجريت اختبارًا سريعًا ، ولم يتم جمع AssertionError المذكور. كما ترى أدناه ، لم يتم إنشاء أي فلتر لحقول الصورة.

"" الثعبان

عارضات ازياء

من نماذج الاستيراد django.db

متجر فئة (طرازات. نموذج):
الاسم = النماذج. CharField (max_length = 80)
تم الإنشاء = Models.DateField ()
الصورة = النماذج.

المرشحات

استيراد django_filters

فئة StoreFilter (django_filters.FilterSet):
فئة ميتا:
النموذج = مخزن
استبعاد = ['صورة']
الحقول = {
'الاسم': ['دقيق'، 'يحتوي على']،
"تم إنشاؤه": ["دقيق"، "year__gt"]،
}

إخراج وحدة التحكم

في [8]: StoreFilter.base_filters
خارج [8]:
OrderedDict ([('name'،) ،
("name__contains" ،) ،
('خلقت'،) ،
('تم إنشاؤه__year__gt' ،)])
""

هل يمكنك تقديم النموذج الكامل ورمز الفلتر؟ إذا لم يكن الأمر كذلك ، فسيكون من المفيد استخدام مثال مقطر يوضح المشكلة.

مرحبًا ، شكرًا لعودتك إلي! امنحني مزيدًا من الوقت لمعرفة الخطأ الذي قد أكون قد ارتكبه ، سيكون محرجًا إذا كان خطأ مبتدئًا ؛)

مرحبًا msbt - هل اكتشفت يومًا ما الذي كان يحدث ، أم يمكن إغلاق هذا؟

ليس لدي وقت الآن ، لذا دعنا نغلقها ونعيد زيارتها عندما أحاول مرة أخرى وأتعثر ؛)

msbt أي فكرة عن هذه المشكلة؟ لدي مثلها

georgezouq خائف لا ، تخلى عن المشروع لأسباب مختلفة ولم تجد حلاً

الرجاء التتبع. 😀

Internal Server Error: /stadiums/
Traceback (most recent call last):
  File "C:\Users\default_user\PycharmProjects\pina_colada\venv\lib\site-packages\django\core\handlers\exception.py", line 34, in inner
    response = get_response(request)
  File "C:\Users\default_user\PycharmProjects\pina_colada\venv\lib\site-packages\django\core\handlers\base.py", line 126, in _get_response
    response = self.process_exception_by_middleware(e, request)
  File "C:\Users\default_user\PycharmProjects\pina_colada\venv\lib\site-packages\django\core\handlers\base.py", line 124, in _get_response
    response = wrapped_callback(request, *callback_args, **callback_kwargs)
  File "C:\Users\default_user\PycharmProjects\pina_colada\venv\lib\site-packages\django\views\generic\base.py", line 68, in view
    return self.dispatch(request, *args, **kwargs)
  File "C:\Users\*\PycharmProjects\pina_colada\venv\lib\site-packages\django\views\generic\base.py", line 88, in dispatch
    return handler(request, *args, **kwargs)
  File "C:\Users\*\PycharmProjects\pina_colada\venv\lib\site-packages\django_filters\views.py", line 77, in get
    filterset_class = self.get_filterset_class()
  File "C:\Users\*\PycharmProjects\pina_colada\venv\lib\site-packages\django_filters\views.py", line 35, in get_filterset_class
    return filterset_factory(model=self.model, fields=self.filterset_fields)
  File "C:\Users\*\PycharmProjects\pina_colada\venv\lib\site-packages\django_filters\filterset.py", line 459, in filterset_factory
    (FilterSet,), {'Meta': meta})
  File "C:\Users\default_user\PycharmProjects\pina_colada\venv\lib\site-packages\django_filters\filterset.py", line 71, in __new__
    new_class.base_filters = new_class.get_filters()
  File "C:\Users\default_user\PycharmProjects\pina_colada\venv\lib\site-packages\django_filters\filterset.py", line 345, in get_filters
    filters[filter_name] = cls.filter_for_field(field, field_name, lookup_expr)
  File "C:\Users\default_user\PycharmProjects\pina_colada\venv\lib\site-packages\django_filters\filterset.py", line 377, in filter_for_field
    ) % (cls.__name__, field_name, lookup_expr, field.__class__.__name__)
AssertionError: StadiumFilterSet resolved field 'graphic' with 'exact' lookup to an unrecognized field type FileField. Try adding an override to 'Meta.filter_overrides'. See: https://django-filter.readthedocs.io/en/master/ref/filterset.html#customise-filter-generation-with-filter-overrides
[13/Dec/2018 08:23:58] "GET /stadiums/?page=1 HTTP/1.1" 500 108150
class StadiumFilter(django_filters.FilterSet):
    name = django_filters.CharFilter(lookup_expr='iexact')

    class Meta:
        model = Stadium
        exclude = ['graphic']
        filter_overrides = {
            models.FileField: {
                'filter_class': django_filters,
                'extra': lambda f: {
                    'lookup_expr': 'icontains',
                },
            },
        }

carltongibson هل يمكنك إلقاء نظرة

كان يتجاهل التجاوزات منذ أن كنت أستخدم طريقة عرض عامة. لقد أدى هذا إلى حل مشكلتي مؤقتًا ولكن موكلي يزعجني في خصوصية مرشحاته. هل يمكنك النظر في هذا

urlpatterns = [
    path('', views.StadiumFilterView.as_view(model=Stadium,
                                             filterset_fields=['name', 'country']), name="stadium_index"),
]

الحقول ، استبعاد ، filter_overrides في Meta لا تحل هذا الخطأ AssertionError ، عندما أستخدم FilterView + filter_class = MyFilterSet ، يجب أن أضبط filter_fields تحت العرض لاستبعاد الحقول ،
وإلا سيتم تشغيل def filter_for_field(cls, f, name, lookup_expr='exact') عبر كافة الحقول

هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات