1

有没有办法将 django admin inline-models 与类似模型的集群分离?

一点上下文:我有一个名为 Page 的模型,它有两个内联模型,TextBlock 和 GalleryContainer。我会根据在页面管理编辑器中添加的顺序在模板上呈现 TextBlocks 和 GalleryContainers。默认的 django-admin 显示如下所示:

django-admin 显示

我希望它显示为:

  • 画廊容器 1
  • 文本块 1
  • 画廊容器 2

但我不知道该怎么做。任何朝着正确方向的建议或推动都会有很大帮助。提前致谢。(我也希望我的问题有意义......)

4

1 回答 1

0

如果您想要列和图库之间的关系,您的模型应该反映这一点。所以如果我理解正确:一个页面有名称和列。列具有文本、图库(可选)和排序。

模型.py:

class Page(models.Model):
   name = models.CharField(max_length=200)

class Gallery(models.Model):
   name = models.CharField(max_length=200)

class Column(models.Model):
   page = models.ForeignKey(Page)
   text = models.TextField()
   gallery = models.ForeignKey(Gallery, null=True, blank=True) # Optional
   ordering = models.IntegerField()

   class Meta:
       ordering = ('ordering', )

此示例显示了如何通过 IntegerField 进行排序。如果您想根据添加的时间对列进行排序,请替换

ordering = models.IntegerField()

models.datetimeField(auto_now_add=True)

在您的 admin.py 中:

class ColumnInline(admin.TabularInline): # or StackedInline
    model = Column

class PageAdmin(admin.ModelAdmin):
    inlines = [
        ColumnInline,
    ]

注意:我将您的“画廊显示名称”作为“名称”放在画廊中。为画廊命名一次更有意义。但是,如果一个画廊位于更多不同名称的地方,那么您需要在 Column 模型上使用一个字段(例如,'gallery_display_name=models.CharField(max_lenght=200)')。

这是你问题的答案吗?我希望它有帮助!

于 2012-04-06T17:11:59.790 回答