Внешний ключ Django search_fields не работает

#django #django-admin

#джанго #django-администратор #django

Вопрос:

У меня есть эти две модели :

 class Module(models.Model):
    id = models.AutoField(primary_key=True)
    name = models.CharField(unique=True, max_length=255)

class Subject(models.Model):
    id = models.AutoField(primary_key=True)
    module = models.ForeignKey(Module)
  

Затем я создал ModelAdmin:

 class SubjectAdmin(admin.ModelAdmin):
    list_display = ('module', 'name', 'enabled',)
    list_filter = ('module', 'name',)
    search_fields = ('module', 'name',)
  

Но я не могу фильтровать или искать по модулю.

Ответ №1:

Вы зарегистрировали ModelAdmin?

 admin.site.register(Subject, SubjectAdmin)
  

Вы также можете попробовать либо предоставить модулю __unicode__ метод, либо использовать охват отношений.

 list_filter = ('module__name', 'name',)

# or...
# within Module
def __unicode__(self):
    return self.name
  

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

1. Да, я зарегистрировал предметную модель. Это работает с приведенным ниже кодом. Я уже пробовал module_name раньше, теперь я знаю, что это module__name. Спасибо.

2. Предоставления модуля __unicode__ недостаточно для выполнения поиска. Даже если у вас есть это, вам нужно, module__name чтобы search_fields это работало, начиная с Django 1.6.1

Ответ №2:

Для повторного использования внешнего ключа __

Пример, если вам нужно имя модуля:

 class Module(models.Model):
    id = models.AutoField(primary_key=True)
    name = models.CharField(unique=True, max_length=255)

    def __unicode__(self):
        return self.name:

class SubjectAdmin(admin.ModelAdmin):
    list_display = ('module', 'name', 'enabled',)
    list_filter = ('module__name', 'name',)
    search_fields = ('module__name', 'name',)