Django-filter: FilterSet bidang yang diselesaikan 'gambar' dengan pencarian 'tepat' ke jenis bidang yang tidak dikenal ImageField...

Dibuat pada 24 Jul 2017  ·  11Komentar  ·  Sumber: carltongibson/django-filter

Hai, yang di sana!
Saya tahu masalah ini telah diatasi di sini , tetapi saya tidak dapat menemukan solusi yang tepat.

Saya memiliki model dengan kelas Toko yang berisi berbagai informasi tentang toko yang berbeda dan termasuk juga bidang dengan image = models.ImageField untuk ditampilkan saat menanyakannya.

Saya mencoba semuanya dari dokumen, tetapi tampaknya mengabaikan pengecualian saya dan juga bidang yang saya filter

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

Inilah yang saya coba filter dan itu terus membuat saya AssertionError itu, tahu apa yang mungkin saya lewatkan? Segera setelah saya mengomentari baris gambar di models.py saya, itu berfungsi (tetapi itu menunjukkan semua bidang, tidak hanya nama dan buat yang saya filter. Setiap petunjuk akan dihargai.

salam Hormat

Komentar yang paling membantu

Hai @msbt - Saya berani bertaruh bahwa beberapa informasi telah ditinggalkan di sini. Saya menjalankan tes cepat, dan AssertionError yang disebutkan tidak dinaikkan. Seperti yang Anda lihat di bawah, tidak ada filter untuk bidang gambar yang dibuat.

```python

model

dari model impor Django.db

Toko kelas (models.Model):
nama = model. CharField(max_length=80)
dibuat = model.DateField()
gambar = model.ImageField()

filter

impor django_filters

kelas StoreFilter(Django_filters.FilterSet):
kelas Meta:
model = Toko
kecualikan = ['gambar']
bidang = {
'nama': ['tepat', 'berisi'],
'dibuat': ['tepat', 'tahun__gt'],
}

keluaran konsol

Di [8]: StoreFilter.base_filters
Keluar[8]:
DipesanDict([('nama',),
('nama__berisi',),
('diciptakan',),
('dibuat__tahun__gt',)])
````

Bisakah Anda memberikan model lengkap & kode filter? Jika tidak, contoh suling yang menunjukkan masalah ini akan sangat membantu.

Semua 11 komentar

Hai @msbt - Saya berani bertaruh bahwa beberapa informasi telah ditinggalkan di sini. Saya menjalankan tes cepat, dan AssertionError yang disebutkan tidak dinaikkan. Seperti yang Anda lihat di bawah, tidak ada filter untuk bidang gambar yang dibuat.

```python

model

dari model impor Django.db

Toko kelas (models.Model):
nama = model. CharField(max_length=80)
dibuat = model.DateField()
gambar = model.ImageField()

filter

impor django_filters

kelas StoreFilter(Django_filters.FilterSet):
kelas Meta:
model = Toko
kecualikan = ['gambar']
bidang = {
'nama': ['tepat', 'berisi'],
'dibuat': ['tepat', 'tahun__gt'],
}

keluaran konsol

Di [8]: StoreFilter.base_filters
Keluar[8]:
DipesanDict([('nama',),
('nama__berisi',),
('diciptakan',),
('dibuat__tahun__gt',)])
````

Bisakah Anda memberikan model lengkap & kode filter? Jika tidak, contoh suling yang menunjukkan masalah ini akan sangat membantu.

Hei, terima kasih sudah kembali padaku! Beri saya sedikit lebih banyak waktu untuk mencari tahu apa yang mungkin saya lakukan salah, akan memalukan jika itu adalah kesalahan pemula ;)

Hai @msbt - apakah Anda pernah mengetahui apa yang sedang terjadi, atau bisakah ini ditutup?

Saya tidak punya waktu sekarang, jadi mari kita tutup dan kunjungi kembali ketika saya mencoba lagi dan macet ;)

@msbt Adakah ide tentang masalah ini? Saya memiliki yang sama

@georgezouq jangan takut, menyerah proyek karena berbagai alasan dan tidak pernah menemukan solusi

Silakan dilacak. 😀.

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 boleh lihat

itu mengabaikan penggantian saya karena saya menggunakan tampilan umum. ini untuk sementara memecahkan masalah saya tetapi klien saya mengganggu saya dalam kekhususan filternya lol. Bisakah Anda melihat ini?

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

bidang, kecualikan, filter_overrides di Meta tidak menyelesaikan kesalahan AssertionError ini, ketika saya menggunakan FilterView + filter_class = MyFilterSet , saya harus mengatur filter_fields di bawah tampilan untuk mengecualikan bidang,
jika tidak def filter_for_field(cls, f, name, lookup_expr='exact') akan dijalankan melalui semua bidang

Apakah halaman ini membantu?
0 / 5 - 0 peringkat