【发布时间】:2021-09-05 16:12:37
【问题描述】:
这个问题真的很难写成一个问题,因为我不完全确定如何首先提出这个问题。但我会试试的。基本上,当我在 django 管理站点中访问父模型时,我遇到了 AttributeError。我当前的 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 管理站点中添加一个新活动,比如说:俯卧撑,那么,我应该能够在指令表单中选择这个新添加的父记录。但是,当我尝试添加新指令记录并选择已保存的活动记录时,活动下拉列表仅显示模型的名称(在本例中为活动)。它不显示俯卧撑。我接下来要做的是为活动和指令添加一些模型管理员。代码如下:
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)
但是,当我这次访问管理站点的活动页面时,该页面会抛出一个值为Unable to lookup 'instruction' on activity or activityAdmin 的AttributeError 异常。这不会发生在说明页面上。我意识到这可能不是在指令表中显示活动标题的方法。不过,我需要在 admin.py 中添加 modelAdmin,以便在管理站点中显示每个模型的所有字段。综上所述:
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
【问题讨论】:
标签: python django django-models django-admin