繁体   English   中英

如何在 Django/Admin 中显示相关对象?

[英]How to show related objects in Django/Admin?

我有 2 个模型:

from django.db import models

class Category(models.Model):
    icon = models.ImageField(upload_to = 'thing/icon/')
    image = models.ImageField(upload_to = 'thing/image/')
    created_at = models.DateTimeField(auto_now_add=True)
    updated_at = models.DateTimeField(auto_now=True)
    title = models.CharField(max_length=200)
    slug = models.SlugField()
    desc = models.TextField(max_length=1000)

    def __str__(self):
        return self.title

    def __unicode__(self):
        return self.title

class Thing(models.Model):
    icon = models.ImageField(upload_to = 'thing/icon/')
    image = models.ImageField(upload_to = 'thing/image/')
    created_at = models.DateTimeField(auto_now_add=True)
    updated_at = models.DateTimeField(auto_now=True)
    title = models.CharField(max_length=200)
    slug = models.SlugField()
    desc = models.TextField(max_length=1000)
    content = models.TextField()
    category = models.ForeignKey('Category')

    def __str__(self):
        return self.title

    def __unicode__(self):
        return self.title

我正在使用 Django 的管理站点进行基本的 CRUD 操作。 如果我在管理中选择一个类别,我需要显示类别中的所有事物。

您可以使用“内联”在该类别的管理详细信息中可视化和编辑某个类别的事物:

在 admin.py 文件中,为 Thing (ThingInline) 创建一个 Inline 对象并修改您的 CategoryAdmin 类以具有 ThingInline 类型的内联,如下所示:

...
class ThingInline(admin.TabularInline):
    model = Thing

class CategoryAdmin(admin.ModelAdmin):
    inlines = [
        ThingInline,
    ]
...

有关更多详细信息,这是管理内联文档: https : //docs.djangoproject.com/en/dev/ref/contrib/admin/#inlinemodeladmin-objects

像这样更新admin.py文件。

from django.contrib import admin
from .views import Category, Thing

class CategoryAdmin(admin.ModelAdmin):
    inlines = [
        ThingInline,
    ]

class ThingInline(admin.TabularInline):
    model = Thing

admin.site.register(Category, CategoryAdmin) 
admin.site.register(Thing)

有两个内联选项TabularInlineStackedInline

几分钟前,搜索如何解决类似问题,我终于找到了解决方案。

您实际上也必须遵循@Matteo Scotuzzi 的回答,然后

在您创建这些模型的应用程序中的 admin.py 中,您必须在@Matteo 代码段下方声明如下:

admin.site.register(Category, CategoryAdmin)

这足以使所有“事物”出现在您的 Django 管理相应页面中的“类别”中,即“类别”。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM