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

Kan*_*mov 17 python django

我有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
Run Code Online (Sandbox Code Playgroud)

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

Mat*_*zzi 29

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

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

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

class CategoryAdmin(admin.ModelAdmin):
    inlines = [
        ThingInline,
    ]
...
Run Code Online (Sandbox Code Playgroud)

有关详细信息,请参阅管理员内联文档:https://docs.djangoproject.com/en/dev/ref/contrib/admin/#inlinemodeladmin-objects

  • 你试过吗?除非我遗漏了一些东西,否则我只是仔细检查了我的一个使用Inlines的实时项目,它确实显示了当前现有的对象.在我的情况下,我有几个,在你的情况下它可能是很多但我认为你可以玩`max_num` (4认同)
  • 我认为MatteoScotuzzi的答案是正确的.@KenanBek如果你没有看到它们,那么代码中可能存在一些其他问题. (4认同)

小智 5

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)
Run Code Online (Sandbox Code Playgroud)

有两个内联选项TabularInlineStackedInline