Django 管理应用的主从页面

8 投票
1 回答
5747 浏览
提问于 2025-04-16 12:47

考虑一下这个在Django中的简化模型:

class Item(models.Model):
    title = models.CharField(max_length=200)
    pub_date = models.DateTimeField()

class ItemDetail(models.Model):
    item = models.ForeignKey(Item)
    name = models.CharField(max_length=200)
    value = models.CharField(max_length=200)
    display_order = models.IntegerField()

有没有办法在同一页面上使用管理界面编辑一个项目及其详细信息,表单的样子大概是这样的:

title:    <       >
pub_date: <       >
details:
+-----------------+----------------------+-------------------------+
|       name      |        value         |      diplay order       |
+-----------------+----------------------+-------------------------+
|<               >|<                    >|<                       >|
|<               >|<                    >|<                       >|
|<               >|<                    >|<                       >|
|<               >|<                    >|<                       >|
|<               >|<                    >|<                       >|
+-----------------+----------------------+-------------------------+

其中 < > 是用来输入数据的占位符。

所以,我的问题是:我能否从父对象的角度使用管理界面来编辑一个 foreign key(外键)关系?如果Django的管理界面没有办法这样编辑数据,那尝试扩展或自定义管理界面来实现这个功能是否是个好主意?有没有什么建议可以帮助我实现这个?

谢谢!

1 个回答

14

其实,Django在处理关系时,只有一种方式比较好用,就是从父级到子级。而反过来,从子级直接编辑父级就比较麻烦。

如果你想要达到你想要的格式,可以看看ModelAdmin的内联功能:
http://docs.djangoproject.com/en/dev/ref/contrib/admin/#django.contrib.admin.InlineModelAdmin

class ItemDetailInline(admin.TabularInline):
    model = ItemDetail

class ItemAdmin(admin.ModelAdmin):
    inlines = [
        ItemDetailInline,
    ]

撰写回答