Django 管理站点:无法在“parent 模型或 'parent modelAdmin' 上查找 'child model'

Django admin site: Unable to lookup 'child model' on 'parent model or 'parent modelAdmin'

这个真的很难写成一个问题,因为我一开始并不确定如何提出这个问题。但我会努力的。基本上,当我访问我的 django 管理站点中的 parent 模型时,我遇到了 AttributeError。我当前的 django 数据库有 2 tables(预建的 tables 除外):一个 parent table / activity 模型和一个 child table/指令模型。这是我的模型的结构:

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 管理站点中添加一个新的 activity,说:Push-ups,那么,我应该能够 select 这个新添加的 parent 记录在指示表中。但是,当我尝试添加新指令记录和 select 已保存的 activity 记录时,activity 下拉列表仅显示模型名称(在本例中,activity ).它不显示 Push-ups。我接下来要做的是为 activity 和指令添加一些 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)

然而,当我这次访问管理站点的activity页面时,该页面抛出值为Unable to lookup 'instruction' on activity or activityAdmin的AttributeError异常。这不会发生在说明页面上。我意识到这可能不是在指令表中显示 activity 标题的方法。不过,我需要在 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

尝试更新您的 str 定义。这用作下拉显示值,您当前设置为 class 名称。如果你想让它在下拉列表中显示标题:

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