В соответствующем поле получен недопустимый поиск: icontains — Django 2.1

#django #python-3.x #django-models

#django #python-3.x #django-модели

Вопрос:

Я пытаюсь сделать поле «vanKit» доступным для поиска на моей странице администратора. «vanKit» — это внешний ключ, и всякий раз, когда я добавляю его в свой список search_fields, он выдает мне ошибку «В соответствующем поле получен недопустимый поиск: icontains». Вот мой код:

Models.py

 class KitSupplies(models.Model):
    supplyName = models.ForeignKey(supplies, on_delete=models.CASCADE)
    vanKit = models.ForeignKey(van_kit, on_delete=models.CASCADE)
    quantity = models.PositiveSmallIntegerField(blank=False)
    def __str__(self):
        return str(self.supplyName)
    class Meta:
        verbose_name_plural = 'Kit Supplies'
  

admin.py

 class KitSuppliesAdmin(admin.ModelAdmin):
    list_display = ('supplyName', 'vanKit', 'quantity')
    search_fields = ['vanKit']

admin.site.register(KitSupplies, KitSuppliesAdmin)
  

Я пытался использовать search_fields = ['vanKit__name'] , как предлагали другие ответы stack overflow, но у меня это не сработало. Кто-нибудь может объяснить, почему я получаю эту ошибку и как ее обойти? Я использую Django 2.1 и python 3.7. Заранее спасибо!

Комментарии:

1. Как выглядит модель vanKit? Вы уверены, что VanKit.name это поле string?

2. Является ли van_kit и supplies вашим именем класса? почему нет VanKit и Supply ? Смотрите: docs.python-guide.org/writing/style

3. vanKit является внешним ключом для van_kit. Названия наборов van указаны в » van_kit_name = models. CharField(max_length= 100)» в классе van_kit

4. Я внесу эти изменения, чтобы также исправить имена классов

Ответ №1:

Итак, я понял это, мне пришлось использовать «search_fields = [‘vanKit__van_kit_name’]» van_kit_name — это поле, содержащее названия наборов van в модели van_kit, к которой «vanKit» относится через внешний ключ. Мне пришлось получить доступ к полю Char, в котором содержалось имя набора van в реальной модели van_kit.