рдирдорд╕реНрддреЗ!
рдореБрдЭреЗ рдкрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рдпрд╣рд╛рдВ рдкрд╣рд▓реЗ рд╣реА рд╕рдВрдмреЛрдзрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рдЪреБрдХрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдЙрдЪрд┐рдд рд╕рдорд╛рдзрд╛рди рдирд╣реАрдВ рдорд┐рд▓ рд░рд╣рд╛ рд╣реИред
рдореЗрд░реЗ рдкрд╛рд╕ рд╕реНрдЯреЛрд░ рдХреНрд▓рд╛рд╕ рд╡рд╛рд▓рд╛ рдПрдХ рдореЙрдбрд▓ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рд╡рд┐рднрд┐рдиреНрди рд╕реНрдЯреЛрд░реНрд╕ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╡рд┐рднрд┐рдиреНрди рдЬрд╛рдирдХрд╛рд░реА рд╢рд╛рдорд┐рд▓ рд╣реИ рдФрд░ рдЗрд╕рдореЗрдВ рдЫрд╡рд┐ = рдореЙрдбрд▓ рдХреЗ рд╕рд╛рде рдПрдХ рдлрд╝реАрд▓реНрдб рднреА рд╢рд╛рдорд┐рд▓ рд╣реИред рдЗрд╕рдХреЗ рд▓рд┐рдП рдкреВрдЫрддрд╛рдЫ рдХрд░рддреЗ рд╕рдордп рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрдореЗрдЬрдлрд┐рд▓реНрдбред
рдореИрдВрдиреЗ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реЛрдВ рд╕реЗ рд╕рдм рдХреБрдЫ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА, рд▓реЗрдХрд┐рди рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдореЗрд░реЗ рдмрд╣рд┐рд╖реНрдХрд╛рд░ рдФрд░ рдЙрди рдХреНрд╖реЗрддреНрд░реЛрдВ рдХреЛ рднреА рдЕрдирджреЗрдЦрд╛ рдХрд░ рд░рд╣рд╛ рд╣реИ рдЬрд┐рдиреНрд╣реЗрдВ рдореИрдВ рдлрд╝рд┐рд▓реНрдЯрд░ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ
class StoreFilter(django_filters.FilterSet):
class Meta:
model = Store
exclude = ['image']
fields = {
'name': ['exact', 'contains'],
'created': ['exact', 'year__gt'],
}
рдпрд╣реА рд╡рд╣ рд╣реИ рдЬрд┐рд╕реЗ рдореИрдВ рдлрд╝рд┐рд▓реНрдЯрд░ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдФрд░ рдпрд╣ рдореБрдЭреЗ рдЙрд╕ AssertionError рдХреЛ рдлреЗрдВрдХрддрд╛ рд░рд╣рддрд╛ рд╣реИ, рдХреЛрдИ рд╡рд┐рдЪрд╛рд░ рдЬреЛ рдореБрдЭреЗ рдпрд╛рдж рдЖ рд░рд╣рд╛ рд╣реИ? рдЬреИрд╕реЗ рд╣реА рдореИрдВ рдЕрдкрдиреЗ model.py рдореЗрдВ рдЫрд╡рд┐ рд▓рд╛рдЗрди рдкрд░ рдЯрд┐рдкреНрдкрдгреА рдХрд░рддрд╛ рд╣реВрдВ, рдпрд╣ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ (рд▓реЗрдХрд┐рди рдпрд╣ рд╕рднреА рдлрд╝реАрд▓реНрдб рджрд┐рдЦрд╛рддрд╛ рд╣реИ, рди рдХреЗрд╡рд▓ рдирд╛рдо рдФрд░ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рдЬрд┐рд╕реЗ рдореИрдВ рдлрд╝рд┐рд▓реНрдЯрд░ рдХрд░ рд░рд╣рд╛ рдерд╛ред рдХрд┐рд╕реА рднреА рдкреЙрдЗрдВрдЯрд░реНрд╕ рдХреА рд╕рд░рд╛рд╣рдирд╛ рдХреА рдЬрд╛рдПрдЧреАред
рд╕рд╛рджрд░
рд╣рд╛рдп @msbt - рдореИрдВ рд╢рд░реНрдд рд▓рдЧрд╛рддрд╛ рд╣реВрдВ рдХрд┐ рдпрд╣рд╛рдВ рдХреБрдЫ рдЬрд╛рдирдХрд╛рд░реА рдЫреЛрдбрд╝реА рдЧрдИ рд╣реИред рдореИрдВрдиреЗ рдПрдХ рддреНрд╡рд░рд┐рдд рдкрд░реАрдХреНрд╖рдг рдЪрд▓рд╛рдпрд╛, рдФрд░ рдЙрд▓реНрд▓рд┐рдЦрд┐рдд AssertionError
рдХреЛ рдирд╣реАрдВ рдЙрдард╛рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рдиреАрдЪреЗ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдЫрд╡рд┐ рдлрд╝реАрд▓реНрдб рдХреЗ рд▓рд┐рдП рдХреЛрдИ рдлрд╝рд┐рд▓реНрдЯрд░ рдирд╣реАрдВ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рдерд╛ред
`` `рдкрд╛рдпрдерди
django.db рдЖрдпрд╛рдд рдореЙрдбрд▓ рд╕реЗ
рдХреНрд▓рд╛рд╕ рд╕реНрдЯреЛрд░ (рдореЙрдбрд▓ред рдореЙрдбрд▓):
рдирд╛рдо = рдореЙрдбрд▓ред рдЪрд╛рд░рдлрд┐рд▓реНрдб (max_length = 80)
рдмрдирд╛рдпрд╛ = рдореЙрдбрд▓ред рдбреЗрдЯрдлрд┐рд▓реНрдб ()
рдЫрд╡рд┐ = рдореЙрдбрд▓ред рдЗрдореЗрдЬрдлрд┐рд▓реНрдб ()
django_filters рдЖрдпрд╛рдд рдХрд░реЗрдВ
рдХреНрд▓рд╛рд╕ рд╕реНрдЯреЛрд░рдлрд┐рд▓реНрдЯрд░ (django_filters.FilterSet):
рд╡рд░реНрдЧ рдореЗрдЯрд╛:
рдореЙрдбрд▓ = рд╕реНрдЯреЛрд░
рдмрд╣рд┐рд╖реНрдХреГрдд = ['рдЫрд╡рд┐']
рдлрд╝реАрд▓реНрдб = {
'рдирд╛рдо': ['рд╕рдЯреАрдХ', 'рд╢рд╛рдорд┐рд▓ рд╣реИ'],
'рдмрдирд╛рдпрд╛': ['рд╕рдЯреАрдХ', 'рд╡рд░реНрд╖__gt'],
}
[8] рдореЗрдВ: StoreFilter.base_filters
рдЖрдЙрдЯ [8]:
рдСрд░реНрдбрд░реНрдб рдбрд┐рдХреНрдЯ ([('рдирд╛рдо',
('рдирд╛рдо__ рд╢рд╛рдорд┐рд▓ рд╣реИ',
('рдмрдирд╛рдпрд╛ рдерд╛',
('рдмрдирд╛рдпрд╛__рд╡рд░реНрд╖__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',
},
},
}
@carlongibson рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ
рдпрд╣ рдореЗрд░реЗ рдУрд╡рд░рд░рд╛рдЗрдб рдХреЛ рдЕрдирджреЗрдЦрд╛ рдХрд░ рд░рд╣рд╛ рдерд╛ рдХреНрдпреЛрдВрдХрд┐ рдореИрдВ рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рджреГрд╢реНрдп рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рдерд╛ред рдЗрд╕рдиреЗ рдореЗрд░реА рд╕рдорд╕реНрдпрд╛ рдХреЛ рдЕрд╕реНрдерд╛рдпреА рд░реВрдк рд╕реЗ рд╣рд▓ рдХрд░ рджрд┐рдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореЗрд░рд╛ рдореБрд╡рдХреНрдХрд┐рд▓ рдореБрдЭреЗ рдЕрдкрдиреЗ рдлрд┐рд▓реНрдЯрд░ рдХреА рд╡рд┐рд╢рд┐рд╖реНрдЯрддрд╛ рдореЗрдВ рдкрд░реЗрд╢рд╛рди рдХрд░ рд░рд╣рд╛ рд╣реИред рдХреНрдпрд╛ рдЖрдк рдЗрд╕ рдкрд░ рдЧреМрд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ?
urlpatterns = [
path('', views.StadiumFilterView.as_view(model=Stadium,
filterset_fields=['name', 'country']), name="stadium_index"),
]
рдореЗрдЯрд╛ рдореЗрдВ рдлрд╝реАрд▓реНрдб, рдмрд╣рд┐рд╖реНрдХреГрдд, рдлрд╝рд┐рд▓реНрдЯрд░_рдУрд╡рд░рд░рд╛рдЗрдб рдЗрд╕ AssertionError
рддреНрд░реБрдЯрд┐ рдХреЛ рд╣рд▓ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рдЬрдм рдореИрдВ FilterView
+ filter_class = MyFilterSet
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ, рддреЛ рдореБрдЭреЗ рдлрд╝реАрд▓реНрдб рдХреЛ рдмрд╛рд╣рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдлрд╝рд┐рд▓реНрдЯрд░_рдлрд╝реАрд▓реНрдб рд╕реЗрдЯ рдХрд░рдирд╛ рд╣реЛрдЧрд╛,
рдЕрдиреНрдпрдерд╛ def filter_for_field(cls, f, name, lookup_expr='exact')
рд╕рднреА рдХреНрд╖реЗрддреНрд░реЛрдВ рдореЗрдВ рдЪрд▓реЗрдЧрд╛
рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА
рд╣рд╛рдп @msbt - рдореИрдВ рд╢рд░реНрдд рд▓рдЧрд╛рддрд╛ рд╣реВрдВ рдХрд┐ рдпрд╣рд╛рдВ рдХреБрдЫ рдЬрд╛рдирдХрд╛рд░реА рдЫреЛрдбрд╝реА рдЧрдИ рд╣реИред рдореИрдВрдиреЗ рдПрдХ рддреНрд╡рд░рд┐рдд рдкрд░реАрдХреНрд╖рдг рдЪрд▓рд╛рдпрд╛, рдФрд░ рдЙрд▓реНрд▓рд┐рдЦрд┐рдд
AssertionError
рдХреЛ рдирд╣реАрдВ рдЙрдард╛рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рдиреАрдЪреЗ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдЫрд╡рд┐ рдлрд╝реАрд▓реНрдб рдХреЗ рд▓рд┐рдП рдХреЛрдИ рдлрд╝рд┐рд▓реНрдЯрд░ рдирд╣реАрдВ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рдерд╛ред`` `рдкрд╛рдпрдерди
рдореЙрдбрд▓
django.db рдЖрдпрд╛рдд рдореЙрдбрд▓ рд╕реЗ
рдХреНрд▓рд╛рд╕ рд╕реНрдЯреЛрд░ (рдореЙрдбрд▓ред рдореЙрдбрд▓):
рдирд╛рдо = рдореЙрдбрд▓ред рдЪрд╛рд░рдлрд┐рд▓реНрдб (max_length = 80)
рдмрдирд╛рдпрд╛ = рдореЙрдбрд▓ред рдбреЗрдЯрдлрд┐рд▓реНрдб ()
рдЫрд╡рд┐ = рдореЙрдбрд▓ред рдЗрдореЗрдЬрдлрд┐рд▓реНрдб ()
рдлрд┐рд▓реНрдЯрд░
django_filters рдЖрдпрд╛рдд рдХрд░реЗрдВ
рдХреНрд▓рд╛рд╕ рд╕реНрдЯреЛрд░рдлрд┐рд▓реНрдЯрд░ (django_filters.FilterSet):
рд╡рд░реНрдЧ рдореЗрдЯрд╛:
рдореЙрдбрд▓ = рд╕реНрдЯреЛрд░
рдмрд╣рд┐рд╖реНрдХреГрдд = ['рдЫрд╡рд┐']
рдлрд╝реАрд▓реНрдб = {
'рдирд╛рдо': ['рд╕рдЯреАрдХ', 'рд╢рд╛рдорд┐рд▓ рд╣реИ'],
'рдмрдирд╛рдпрд╛': ['рд╕рдЯреАрдХ', 'рд╡рд░реНрд╖__gt'],
}
рдХрдВрд╕реЛрд▓ рдЖрдЙрдЯрдкреБрдЯ
[8] рдореЗрдВ: StoreFilter.base_filters),),),)])
рдЖрдЙрдЯ [8]:
рдСрд░реНрдбрд░реНрдб рдбрд┐рдХреНрдЯ ([('рдирд╛рдо',
('рдирд╛рдо__ рд╢рд╛рдорд┐рд▓ рд╣реИ',
('рдмрдирд╛рдпрд╛ рдерд╛',
('рдмрдирд╛рдпрд╛__рд╡рд░реНрд╖__gt',
````
рдХреНрдпрд╛ рдЖрдк рдкреВрд░рд╛ рдореЙрдбрд▓ рдФрд░ рдлрд╝рд┐рд▓реНрдЯрд░ рдХреЛрдб рдкреНрд░рджрд╛рди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ? рдпрджрд┐ рдирд╣реАрдВ, рддреЛ рдПрдХ рдЖрд╕реБрдд рдЙрджрд╛рд╣рд░рдг рдЬреЛ рд╕рдорд╕реНрдпрд╛ рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддрд╛ рд╣реИ рд╡рд╣ рд╕рд╣рд╛рдпрдХ рд╣реЛрдЧрд╛ред