#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/style3. 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.