@MickGood

Как в Django сделать поиск в админке по полю ForeignKey?

Программирую БД на Django и столкнулся с проблемой по поиску в админке с полем ForeignKey. Есть модель и поиск по трём полям:
manage.py
class Suppliers_goods(models.Model):
    Product_code = models.AutoField(primary_key=True, name='Код товара')
    Product_Name = models.CharField('Название товара', unique=True, max_length=100)
    Pharm_Group_SG = models.ForeignKey('Pharmacological_group', to_field='Pharm_Group', on_delete=models.PROTECT,
                                       null=True, verbose_name='ФармГруппа', related_name='Pharm_Group_SG')
    Packing_form = models.CharField('Форма упаковки', unique=True, max_length=100)
    Manufacturer = models.CharField('Производитель', max_length=100)
    Supplier_name_SG = models.ForeignKey('Suppliers', to_field='Supplier_name', on_delete=models.PROTECT, null=True,
                                         verbose_name='Название поставщика', related_name='Supplier_name_SG')
    The_price_of_the_product = models.PositiveIntegerField('Цена товара в рублях')


admin.py
class Suppliers_goodsAdmin(admin.ModelAdmin):
    list_display = ('Product_Name', 'Pharm_Group_SG', 'Packing_form', 'Manufacturer', 'Supplier_name_SG',
                    'The_price_of_the_product')
    search_fields = ['Product_Name', 'Pharm_Group_SG', 'Packing_form']

При вбивании в поиск слова выводит вот это:
FieldError at /admin/database/sales/
Related Field got invalid lookup: icontains
Request Method: 	GET
Request URL: 	http://127.0.0.1:8000/admin/database/sales/?q=%D1%8D
Django Version: 	4.1.5
Exception Type: 	FieldError
Exception Value:       Related Field got invalid lookup: icontains
Exception Location: 	C:\Users\Mick\AppData\Local\Programs\Python\Python311\Lib\site-packages\django\db\models\sql\query.py, line 1292, in build_lookup
Raised during: 	django.contrib.admin.options.changelist_view
Python Executable: 	C:\Users\Mick\AppData\Local\Programs\Python\Python311\python.exe
Python Version: 	3.11.1

В интернете нашёл что надо добавить "__name", вот так:
class Suppliers_goodsAdmin(admin.ModelAdmin):
    list_display = ('Product_Name', 'Pharm_Group_SG', 'Packing_form', 'Manufacturer', 'Supplier_name_SG',
                    'The_price_of_the_product')
    search_fields = ['Product_Name', 'Pharm_Group_SG__name', 'Packing_form']

Но выводится тоже ошибка, но другая:
FieldError at /admin/database/suppliers_goods/
Related Field got invalid lookup: name
Request Method: 	GET
Request URL: 	http://127.0.0.1:8000/admin/database/suppliers_goods/?q=%D1%8D
Django Version: 	4.1.5
Exception Type: 	FieldError
Exception Value: 	Related Field got invalid lookup: name
Exception Location: 	C:\Users\Mick\AppData\Local\Programs\Python\Python311\Lib\site-packages\django\db\models\sql\query.py, line 1466, in build_filter
Raised during: 	django.contrib.admin.options.changelist_view
Python Executable: 	C:\Users\Mick\AppData\Local\Programs\Python\Python311\python.exe
Python Version: 	3.11.1

Подскажите, пожалуйста, как это можно исправить? Или как-то подругому можно организовать поиск в админке?
А то искал в Django документации, но не нашёл то что подходит.
  • Вопрос задан
  • 337 просмотров
Решения вопроса 1
Mi11er
@Mi11er
A human...
Нашли то вы верно... А вот есть ли name у модели ?
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы