#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',)