【问题标题】:How to set up Django admin.TabularInline on a table with a compount key如何使用复合键在表上设置 Django admin.TabularInline
【发布时间】:2009-12-18 21:01:10
【问题描述】:

我基本上有两个表:Page(PK=url) 和 PageProperty(PK=url+name)。

这是我设置模型的方式:

class Page(model.Model):
    url   = model.CharField(primary_key=True, max_length=255, db_column='url')
    #.....

class PageProperty(model.Model):
    # table with compound key (url + name)
    url   = model.ForeignKey('Page', to_field='url', db_column='url', primary_key=True)
    name  = model.CharField(primary_key=True, max_length=20)
    value = model.TextField()

我设置了 ModelAdmin,因此我可以从 Page 内联编辑 PageProperty。它是一个遗留数据库,我知道那里有很多数据。但是管理员只显示一个 PagePropertys,而不是全部。

【问题讨论】:

    标签: django django-models django-admin


    【解决方案1】:

    我认为您可能需要将extra 选项应用于您的TabularInline。示例:

    class PagePropertyInline(admin.TabularInline):
        model = PageProperty
        extra = 3
    

    您可能会做一些魔术来使额外项目的数量动态化(例如给定 PagePageProperty 对象的数量,但我会留给您。

    我建议进一步阅读 InlineModelAdmin optionsFormsets

    【讨论】:

    • 谢谢,但 'extra' 属性用于控制为新记录显示多少空行。
    • 我很确定它也适用于表单集的显示,但也有可能抽了太多的裂缝。
    【解决方案2】:

    因为觉得非整数主键太过分了,所以我最终放弃并迁移架构以对两个表使用自动生成的整数 pk。在那之后,一切都又一帆风顺了,Inlines 工作得很好。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-05-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-08-22
      • 2021-03-09
      • 2020-12-28
      相关资源
      最近更新 更多