【问题标题】:How to add a quick-add link to a related model in Django Admin如何在 Django Admin 中向相关模型添加快速添加链接
【发布时间】:2012-02-24 14:03:12
【问题描述】:

假设有两个类:

class A(models.Model): 
    …

class B(models.Model): 
    a = models.ForeignKey(A) 
    …

为了方便在不记A的情况下添加B,如何在A的change表单中添加添加B的链接?

这是this link中提到的一个解决方案,建议在B的模型中添加一些代码,但我认为这样的代码不应该放在模型中。

更新:

内联有问题(或者我做的不对):当内联对象的数量超过max_num属性时,没有新的空白表单可以添加新的对象。但是,内联对象的数量可能非常大。

【问题讨论】:

标签: python django django-forms django-admin django-templates


【解决方案1】:

模型 A 对 B 有一个反向外键,因为 B 对 A 有一个外键:

  • B().a 是外键
  • A().bet_set 是一个反向外键

Django 提供“inlines”来处理反向外键。

  1. 在用户定义视图/您的代码中的表单上下文中,使用inline model formsets。

  2. 在 Django admin 的上下文中,使用 InlineModelAdmin,例如 StackedInline 或 TabularInline

如果您不希望从现有对象生成内联表单集,则覆盖 queryset() method of your admin inline formset class,返回类似:YourModel.objects.none()

这将使内联表单集始终为空。如果您只想要一个额外的表单,请设置 extra=1。

【讨论】:

  • 有一个问题困扰着我不使用内联,我已经更新了这个问题。
  • 如果 max_num 对你来说是一个限制,你为什么不把它从你的 inline 中删除?
  • 但是内联对象的数量可能有几万个...我只需要一个空白表格...
  • 你有没有想过使用 extra = 1 并删除 max_num ?
  • @Meitham 我的问题是存在的内联对象太多了,我不得不选择显示其中的几个。但是,当我转向文档时,他们提到“max_num”不会限制要显示的现有对象——它们都会被显示。此外,当对象超过“max_num”时,“extra”属性不起作用。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-06-30
  • 2022-01-04
  • 2014-09-04
  • 1970-01-01
  • 1970-01-01
  • 2021-02-18
  • 2017-05-25
相关资源
最近更新 更多