2014-02-09 58 views
9

我有2种型号:如何在Django/Admin中显示相关对象?

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操作。如果我在管理员中选择类别,我需要显示类别中的所有内容。

回答

17

您可以使用“内联”在管理细节该类别查看并修改某一类的东西:

在admin.py文件,创建一个东西(ThingInline)嵌入对象和修改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

+0

内联不显示当前的现有对象。它显示添加它们的表单。 –

+2

你试过了吗?除非我错过了一些东西,否则我会再次检查一个使用Inlines的实时项目,并确实显示当前的现有对象。在我的情况下,我有几个,在你的情况下,它可能是很多,但我认为你可以玩'max_num' –

+2

我认为MatteoScotuzzi的答案是正确的。 @KenanBek如果你没有看到它们,那么你的代码中可能存在一些其他问题。 – laike9m

0

这个问题有很多年了,但还是值得给它一个镜头。几分钟前,我在寻找如何解决类似问题,终于找到了解决方案。

实际上,你必须遵循@Matteo Scotuzzi回答为好,然后

里面admin.py位于应用您所创建的那些模型,你必须声明如下右波纹管@Matteo片段:

admin.register.site(Category, CategoryAdmin) 

这就足以让所有的“事物”出现在你的Django管理相应页面的“Category”里面,即“Category”。