Сайт администратора Django: Невозможно найти 'дочернюю модель' в 'родительской модели или 'родительской моделиAdmin'
Это очень трудно написать в виде вопроса, так как я не совсем уверен, как спросить об этом в первую очередь. Но я попробую. По сути, я сталкиваюсь с ошибкой AttributeError при посещении родительской модели в моей админке django. Моя текущая база данных django имеет 2 таблицы (кроме готовых таблиц): родительская таблица / модель для деятельности, и дочерняя таблица / модель для инструкции. Вот структура моих моделей:
class activity(models.Model):
title = models.CharField(max_length=30,default=None)
date_created = models.DateTimeField(auto_now_add=True)
date_updated = models.DateTimeField(auto_now=True)
author = models.ForeignKey(User,on_delete=models.CASCADE,default=None)
def __str__(self):
return self.__class__.__name__
class instruction(models.Model):
detail = models.CharField(max_length=50,default=None)
date_created = models.DateTimeField(auto_now_add=True)
date_updated = models.DateTimeField(auto_now=True)
author = models.ForeignKey(User,on_delete=models.CASCADE,default=None)
activity = models.ForeignKey(activity,on_delete=models.CASCADE,default=None)
def __str__(self):
return self.__class__.__name__
Итак, если я добавляю новую активность в админке django, скажем: Отжимания, то я должен иметь возможность выбрать эту недавно добавленную родительскую запись в форме инструкции. Однако, когда я пытаюсь добавить новую запись инструкции и выбрать сохраненную запись активности, в выпадающем списке активности отображается только имя модели (в данном случае, активности). Отжимания не отображаются. Что я сделал дальше, так это добавил несколько modelAdmins для активности и инструкции. Вот код:
class activityAdmin(admin.ModelAdmin):
list_display = [field.name for field in activity._meta.get_fields()]
class instructionAdmin(admin.ModelAdmin):
list_display = [field.name for field in instruction._meta.get_fields()]
admin.site.register(activity, activityAdmin)
admin.site.register(instruction, instructionAdmin)
Однако, когда я посещаю страницу активности на сайте администратора в этот раз, страница выбрасывает исключение AttributeError со значением Unable to lookup 'instruction' on activity or activityAdmin
. Этого не происходит на странице инструкции. Я понял, что это может быть не тот метод отображения заголовка активности в форме инструкции. Тем не менее, мне нужно добавить modelAdmin в admin.py, чтобы отображать все поля каждой модели в админке. Итак, подведем итоги:
1. I need to display the parent model's field value (activity title) as an option in the child model's dropdown and not only the name of the parent model
2. I need to display the fields of each models on their respective registries in the admin site
Попробуйте обновить определение str. Оно используется в качестве значения отображения выпадающего списка, и в настоящее время вы устанавливаете его в имя класса. Если вы хотите, чтобы в выпадающем списке отображался заголовок:
class activity(models.Model):
title = models.CharField(max_length=30,default=None)
date_created = models.DateTimeField(auto_now_add=True)
date_updated = models.DateTimeField(auto_now=True)
author = models.ForeignKey(User,on_delete=models.CASCADE,default=None)
def __str__(self):
return self.title