ΠΡΠ΅ΠΌ ΠΏΡΠΈΠ²Π΅Ρ!
Π― Π·Π½Π°Ρ, ΡΡΠΎ ΡΡΠ° ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ° ΡΠΆΠ΅ ΠΎΠ±ΡΡΠΆΠ΄Π°Π»Π°ΡΡ Π·Π΄Π΅ΡΡ , Π½ΠΎ Ρ ΠΏΡΠΎΡΡΠΎ Π½Π΅ ΠΌΠΎΠ³Ρ Π½Π°ΠΉΡΠΈ ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎΠ³ΠΎ ΡΠ΅ΡΠ΅Π½ΠΈΡ.
Π£ ΠΌΠ΅Π½Ρ Π΅ΡΡΡ ΠΌΠΎΠ΄Π΅Π»Ρ Ρ ΠΊΠ»Π°ΡΡΠΎΠΌ Store, ΠΊΠΎΡΠΎΡΡΠΉ ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ ΡΠ°Π·Π»ΠΈΡΠ½ΡΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΎ ΡΠ°Π·Π½ΡΡ ΠΌΠ°Π³Π°Π·ΠΈΠ½Π°Ρ , Π° ΡΠ°ΠΊΠΆΠ΅ Π²ΠΊΠ»ΡΡΠ°Π΅Ρ ΠΏΠΎΠ»Π΅ Ρ image = models.ImageField Π΄Π»Ρ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ ΠΏΡΠΈ Π·Π°ΠΏΡΠΎΡΠ΅ ΠΊ Π½Π΅ΠΌΡ.
Π― ΠΏΡΠΎΠ±ΠΎΠ²Π°Π» Π²ΡΠ΅ ΠΈΠ· Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠΎΠ², Π½ΠΎ, ΠΏΠΎΡ ΠΎΠΆΠ΅, ΠΎΠ½ ΠΈΠ³Π½ΠΎΡΠΈΡΡΠ΅Ρ ΠΌΠΎΠ΅ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅, Π° ΡΠ°ΠΊΠΆΠ΅ ΠΏΠΎΠ»Ρ, ΠΊΠΎΡΠΎΡΡΠ΅ Ρ ΡΠΈΠ»ΡΡΡΡΡ.
class StoreFilter(django_filters.FilterSet):
class Meta:
model = Store
exclude = ['image']
fields = {
'name': ['exact', 'contains'],
'created': ['exact', 'year__gt'],
}
ΠΡΠΎ ΡΠΎ, ΡΡΠΎ Ρ ΠΏΡΡΠ°ΡΡΡ ΠΎΡΡΠΈΠ»ΡΡΡΠΎΠ²Π°ΡΡ, ΠΈ ΠΎΠ½ ΠΏΡΠΎΠ΄ΠΎΠ»ΠΆΠ°Π΅Ρ Π²ΡΠ΄Π°Π²Π°ΡΡ ΠΌΠ½Π΅ AssertionError, Π΅ΡΡΡ ΠΈΠ΄Π΅ΠΈ, ΡΡΠΎ Ρ ΠΌΠΎΠ³Ρ ΡΠΏΡΡΡΠΈΡΡ? ΠΠ°ΠΊ ΡΠΎΠ»ΡΠΊΠΎ Ρ ΠΏΡΠΎΠΊΠΎΠΌΠΌΠ΅Π½ΡΠΈΡΡΡ ΡΡΡΠΎΠΊΡ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ Π² ΠΌΠΎΠ΅ΠΌ ΡΠ°ΠΉΠ»Π΅ models.py, ΠΎΠ½Π° Π·Π°ΡΠ°Π±ΠΎΡΠ°Π΅Ρ (Π½ΠΎ Π² Π½Π΅ΠΉ Π±ΡΠ΄ΡΡ ΠΏΠΎΠΊΠ°Π·Π°Π½Ρ Π²ΡΠ΅ ΠΏΠΎΠ»Ρ, Π° Π½Π΅ ΡΠΎΠ»ΡΠΊΠΎ ΠΈΠΌΡ ΠΈ ΡΠΎΠ·Π΄Π°Π½Π½ΠΎΠ΅, Π΄Π»Ρ ΠΊΠΎΡΠΎΡΡΡ Ρ Π²ΡΠΏΠΎΠ»Π½ΡΠ» ΡΠΈΠ»ΡΡΡΠ°ΡΠΈΡ. ΠΡΠ±ΡΠ΅ ΡΠΊΠ°Π·Π°ΡΠ΅Π»ΠΈ Π±ΡΠ΄ΡΡ ΠΎΡΠ΅Π½Π΅Π½Ρ.
Π‘ Π½Π°ΠΈΠ»ΡΡΡΠΈΠΌΠΈ ΠΏΠΎΠΆΠ΅Π»Π°Π½ΠΈΡΠΌΠΈ
ΠΡΠΈΠ²Π΅Ρ , @msbt. ΠΠΎΡΠΎΠ² ΠΏΠΎΡΠΏΠΎΡΠΈΡΡ, ΡΡΠΎ Π·Π΄Π΅ΡΡ ΡΠΏΡΡΠ΅Π½Π° Π½Π΅ΠΊΠΎΡΠΎΡΠ°Ρ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ. Π― ΠΏΡΠΎΠ²Π΅Π» Π±ΡΡΡΡΡΠΉ ΡΠ΅ΡΡ, ΠΈ ΡΠΏΠΎΠΌΡΠ½ΡΡΡΠ΅ AssertionError
Π½Π΅ ΠΏΠΎΠ΄Π½ΡΠ»ΠΈΡΡ. ΠΠ°ΠΊ Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π²ΠΈΠ΄Π΅ΡΡ Π½ΠΈΠΆΠ΅, ΡΠΈΠ»ΡΡΡ Π΄Π»Ρ ΠΏΠΎΠ»Π΅ΠΉ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ ΡΠΎΠ·Π΄Π°Π½ Π½Π΅ Π±ΡΠ».
```ΠΏΠΈΡΠΎΠ½
ΠΈΠ· ΠΌΠΎΠ΄Π΅Π»Π΅ΠΉ ΠΈΠΌΠΏΠΎΡΡΠ° django.db
ΠΠ°Π³Π°Π·ΠΈΠ½ ΠΊΠ»Π°ΡΡΠ° (ΠΌΠΎΠ΄Π΅Π»ΠΈ.ΠΠΎΠ΄Π΅Π»Ρ):
ΠΈΠΌΡ = ΠΌΠΎΠ΄Π΅Π»ΠΈ.CharField(max_length=80)
ΡΠΎΠ·Π΄Π°Π½ΠΎ = ΠΌΠΎΠ΄Π΅Π»ΠΈ.DateField()
ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ = ΠΌΠΎΠ΄Π΅Π»ΠΈ.ImageField()
ΠΈΠΌΠΏΠΎΡΡΠΈΡΠΎΠ²Π°ΡΡ django_filters
ΠΊΠ»Π°ΡΡ StoreFilter (django_filters.FilterSet):
ΠΠ΅ΡΠ° ΠΊΠ»Π°ΡΡΠ°:
ΠΌΠΎΠ΄Π΅Π»Ρ = ΠΠ°Π³Π°Π·ΠΈΠ½
ΠΈΡΠΊΠ»ΡΡΠΈΡΡ = ['ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅']
ΠΏΠΎΠ»Ρ = {
'ΠΈΠΌΡ': ['ΡΠΎΡΠ½ΠΎΠ΅', 'ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ'],
'ΡΠΎΠ·Π΄Π°Π½ΠΎ': ['ΡΠΎΡΠ½ΠΎ', 'Π³ΠΎΠ΄__Π³Ρ'],
}
Π [8]: StoreFilter.base_filters
ΠΡΡ
ΠΎΠ΄[8]:
OrderedDict([('ΠΈΠΌΡ',
('ΠΈΠΌΡ__ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ',
('ΡΠΎΠ·Π΄Π°Π½Π½ΡΠΉ',
('ΡΠΎΠ·Π΄Π°Π½ΠΎ__Π³ΠΎΠ΄__Π³Ρ',
````
ΠΠ΅ ΠΌΠΎΠ³Π»ΠΈ Π±Ρ Π²Ρ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²ΠΈΡΡ ΠΏΠΎΠ»Π½ΡΡ ΠΌΠΎΠ΄Π΅Π»Ρ ΠΈ ΠΊΠΎΠ΄ ΡΠΈΠ»ΡΡΡΠ°? ΠΡΠ»ΠΈ Π½Π΅Ρ, Π±ΡΠ΄Π΅Ρ ΠΏΠΎΠ»Π΅Π·Π΅Π½ Π΄ΠΈΡΡΠΈΠ»Π»ΠΈΡΠΎΠ²Π°Π½Π½ΡΠΉ ΠΏΡΠΈΠΌΠ΅Ρ, Π΄Π΅ΠΌΠΎΠ½ΡΡΡΠΈΡΡΡΡΠΈΠΉ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ.
ΠΠΉ, ΡΠΏΠ°ΡΠΈΠ±ΠΎ, ΡΡΠΎ Π²Π΅ΡΠ½ΡΠ»ΠΈΡΡ ΠΊΠΎ ΠΌΠ½Π΅! ΠΠ°ΠΉΡΠ΅ ΠΌΠ½Π΅ Π΅ΡΠ΅ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ, ΡΡΠΎΠ±Ρ ΠΏΠΎΠ½ΡΡΡ, ΡΡΠΎ Ρ ΠΌΠΎΠ³ ΡΠ΄Π΅Π»Π°ΡΡ Π½Π΅ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎ, Π±ΡΠ»ΠΎ Π±Ρ Π½Π΅Π»ΠΎΠ²ΠΊΠΎ, Π΅ΡΠ»ΠΈ Π±Ρ ΡΡΠΎ Π±ΡΠ»Π° ΠΎΡΠΈΠ±ΠΊΠ° Π½ΠΎΠ²ΠΈΡΠΊΠ°;)
ΠΡΠΈΠ²Π΅Ρ @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')
Π±ΡΠ΄Π΅Ρ ΠΏΡΠΎΡ
ΠΎΠ΄ΠΈΡΡ ΡΠ΅ΡΠ΅Π· Π²ΡΠ΅ ΠΏΠΎΠ»Ρ
Π‘Π°ΠΌΡΠΉ ΠΏΠΎΠ»Π΅Π·Π½ΡΠΉ ΠΊΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΠΉ
ΠΡΠΈΠ²Π΅Ρ , @msbt. ΠΠΎΡΠΎΠ² ΠΏΠΎΡΠΏΠΎΡΠΈΡΡ, ΡΡΠΎ Π·Π΄Π΅ΡΡ ΡΠΏΡΡΠ΅Π½Π° Π½Π΅ΠΊΠΎΡΠΎΡΠ°Ρ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ. Π― ΠΏΡΠΎΠ²Π΅Π» Π±ΡΡΡΡΡΠΉ ΡΠ΅ΡΡ, ΠΈ ΡΠΏΠΎΠΌΡΠ½ΡΡΡΠ΅
AssertionError
Π½Π΅ ΠΏΠΎΠ΄Π½ΡΠ»ΠΈΡΡ. ΠΠ°ΠΊ Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π²ΠΈΠ΄Π΅ΡΡ Π½ΠΈΠΆΠ΅, ΡΠΈΠ»ΡΡΡ Π΄Π»Ρ ΠΏΠΎΠ»Π΅ΠΉ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ ΡΠΎΠ·Π΄Π°Π½ Π½Π΅ Π±ΡΠ».```ΠΏΠΈΡΠΎΠ½
ΠΌΠΎΠ΄Π΅Π»ΠΈ
ΠΈΠ· ΠΌΠΎΠ΄Π΅Π»Π΅ΠΉ ΠΈΠΌΠΏΠΎΡΡΠ° django.db
ΠΠ°Π³Π°Π·ΠΈΠ½ ΠΊΠ»Π°ΡΡΠ° (ΠΌΠΎΠ΄Π΅Π»ΠΈ.ΠΠΎΠ΄Π΅Π»Ρ):
ΠΈΠΌΡ = ΠΌΠΎΠ΄Π΅Π»ΠΈ.CharField(max_length=80)
ΡΠΎΠ·Π΄Π°Π½ΠΎ = ΠΌΠΎΠ΄Π΅Π»ΠΈ.DateField()
ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ = ΠΌΠΎΠ΄Π΅Π»ΠΈ.ImageField()
ΡΠΈΠ»ΡΡΡΡ
ΠΈΠΌΠΏΠΎΡΡΠΈΡΠΎΠ²Π°ΡΡ django_filters
ΠΊΠ»Π°ΡΡ StoreFilter (django_filters.FilterSet):
ΠΠ΅ΡΠ° ΠΊΠ»Π°ΡΡΠ°:
ΠΌΠΎΠ΄Π΅Π»Ρ = ΠΠ°Π³Π°Π·ΠΈΠ½
ΠΈΡΠΊΠ»ΡΡΠΈΡΡ = ['ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅']
ΠΏΠΎΠ»Ρ = {
'ΠΈΠΌΡ': ['ΡΠΎΡΠ½ΠΎΠ΅', 'ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ'],
'ΡΠΎΠ·Π΄Π°Π½ΠΎ': ['ΡΠΎΡΠ½ΠΎ', 'Π³ΠΎΠ΄__Π³Ρ'],
}
ΠΊΠΎΠ½ΡΠΎΠ»ΡΠ½ΡΠΉ Π²ΡΠ²ΠΎΠ΄
Π [8]: StoreFilter.base_filters),),),)])
ΠΡΡ ΠΎΠ΄[8]:
OrderedDict([('ΠΈΠΌΡ',
('ΠΈΠΌΡ__ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ',
('ΡΠΎΠ·Π΄Π°Π½Π½ΡΠΉ',
('ΡΠΎΠ·Π΄Π°Π½ΠΎ__Π³ΠΎΠ΄__Π³Ρ',
````
ΠΠ΅ ΠΌΠΎΠ³Π»ΠΈ Π±Ρ Π²Ρ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²ΠΈΡΡ ΠΏΠΎΠ»Π½ΡΡ ΠΌΠΎΠ΄Π΅Π»Ρ ΠΈ ΠΊΠΎΠ΄ ΡΠΈΠ»ΡΡΡΠ°? ΠΡΠ»ΠΈ Π½Π΅Ρ, Π±ΡΠ΄Π΅Ρ ΠΏΠΎΠ»Π΅Π·Π΅Π½ Π΄ΠΈΡΡΠΈΠ»Π»ΠΈΡΠΎΠ²Π°Π½Π½ΡΠΉ ΠΏΡΠΈΠΌΠ΅Ρ, Π΄Π΅ΠΌΠΎΠ½ΡΡΡΠΈΡΡΡΡΠΈΠΉ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ.