やあ!
この問題はすでにここで解決されていることは知っていますが、適切な解決策を見つけることができません。
さまざまなストアに関するさまざまな情報を含み、クエリ時に表示するimage=models.ImageFieldのフィールドも含むStoreクラスのモデルがあります。
私はドキュメントからすべてを試しましたが、それは私の除外と私がフィルタリングしているフィールドも無視しているようです
class StoreFilter(django_filters.FilterSet):
class Meta:
model = Store
exclude = ['image']
fields = {
'name': ['exact', 'contains'],
'created': ['exact', 'year__gt'],
}
これは私がフィルタリングしようとしているものであり、それは私にそのAssertionErrorを投げ続けます、私が何を見逃しているかもしれないという考えはありますか? 私がmodels.pyの画像行にコメントするとすぐに機能します(ただし、フィルタリング対象の名前と作成されたものだけでなく、すべてのフィールドが表示されます。ポインタをいただければ幸いです。
よろしくお願いします
こんにちは@msbt-私はいくつかの情報がここに省略されていることを賭けたいと思います。 簡単なテストを実行しましたが、言及されたAssertionError
は発生しませんでした。 以下に示すように、画像フィールドのフィルターは作成されていません。
`` `python
django.dbインポートモデルから
クラスStore(models.Model):
名前=models.CharField(max_length = 80)
作成済み=models.DateField()
image = models.ImageField()
django_filtersをインポートします
クラスStoreFilter(django_filters.FilterSet):
クラスメタ:
モデル=ストア
除外=['画像']
フィールド={
'name':['exact'、'contains']、
'作成済み':['正確'、'year__gt']、
}
[8]の場合:StoreFilter.base_filters
Out [8]:
OrderedDict([('name'、
('name__contains'、
('作成した'、
('created__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"),
]
fields、exclude、filter_overrides in Metaは、このAssertionError
エラーを解決しません。$ FilterView
+ filter_class = MyFilterSet
を使用する場合、フィールドを除外するために、ビューの下でfilter_fieldsを設定する必要があります。
それ以外の場合、 def filter_for_field(cls, f, name, lookup_expr='exact')
はすべてのフィールドを実行します
最も参考になるコメント
こんにちは@msbt-私はいくつかの情報がここに省略されていることを賭けたいと思います。 簡単なテストを実行しましたが、言及された
AssertionError
は発生しませんでした。 以下に示すように、画像フィールドのフィルターは作成されていません。`` `python
モデル
django.dbインポートモデルから
クラスStore(models.Model):
名前=models.CharField(max_length = 80)
作成済み=models.DateField()
image = models.ImageField()
フィルタ
django_filtersをインポートします
クラスStoreFilter(django_filters.FilterSet):
クラスメタ:
モデル=ストア
除外=['画像']
フィールド={
'name':['exact'、'contains']、
'作成済み':['正確'、'year__gt']、
}
コンソール出力
[8]の場合:StoreFilter.base_filters)、)、)、)])
Out [8]:
OrderedDict([('name'、
('name__contains'、
('作成した'、
('created__year__gt'、
`` ``
完全なモデルとフィルターコードを提供していただけますか? そうでない場合は、問題を示す蒸留された例が役立ちます。