2011-03-01 163 views
5

Django管理应用考虑在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的管理员以这种方式编辑数据,那么尝试扩展/定制管理员来执行此操作是个好主意吗?如何做到这一点的任何方向?

谢谢!

回答

9

这实际上是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, 
    ] 
+0

WOW。太棒了。在发布此问题之前,我阅读了很多DJANGO管理员文档。我无法相信我错过了那么明显的事情。非常感谢! – 2011-03-01 23:09:15

+0

没有问题;)现在我们需要一个内置的方式直接处理下面的外键! – 2011-03-01 23:10:56