【问题标题】:Django admin site: Unable to lookup 'child model' on 'parent model or 'parent modelAdmin'Django 管理站点:无法在“父模型”或“父模型管理员”上查找“子模型”
【发布时间】: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


    【解决方案1】:

    尝试更新您的 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
    

    【讨论】:

    • 我明白了!这样可行。你知道我怎么做第二个吗?
    猜你喜欢
    • 1970-01-01
    • 2021-12-11
    • 2021-04-01
    • 2015-11-15
    • 2019-01-31
    • 2021-04-07
    • 1970-01-01
    • 2011-01-26
    • 1970-01-01
    相关资源
    最近更新 更多