django admin中的外键表单字段

Posted

技术标签:

【中文标题】django admin中的外键表单字段【英文标题】:Foreign key form field in django admin 【发布时间】:2011-11-25 14:54:00 【问题描述】:

我想根据 django admin 调整我的应用程序,使其更加用户友好。

Add offer page

当用户向客户创建报价时,以下管理页面很好,该报价已在系统中注册。但如果客户是新客户,则用户必须单击 + 并在弹出窗口中提交“添加新客户”表单。这太令人困惑了。

如何更改此行为以使用内联但不在弹出窗口中填充同一页面上的客户端数据?

这是我的 admin.py。

class OptionOffer(admin.ModelAdmin):
   fieldsets = (('', 'fields': (('client'), 'startDate', 'regNumber')),)

class OptionClient(admin.ModelAdmin):
   fieldsets = (('', 'fields': ('code')),)

和model.py

class Client(models.Model):
    code = models.CharField(verbose_name=_("Code"), max_length=11)

class Offer(models.Model):
    client = models.ForeignKey(Client, verbose_name = _("Client"))
    startDate = models.DateTimeField(verbose_name = _("Start date"))
    regNumber = models.CharField(verbose_name=_("Registration number"), max_length=6)

【问题讨论】:

【参考方案1】:

您可以使用一些 javascript 框架,如 jQuery,并使用 iframe 或类似的东西在编辑页面中加载弹出窗口。或者使用一些灯箱样式的弹出窗口而不是 Django 标准的弹出窗口。

【讨论】:

【参考方案2】:

如果不对 django 管理员进行一些严重的黑客攻击,您将无法获得更好的解决方案。您可能会遇到(或被指向)InlineModelFormsets,它在当前表单的底部提供了一个表单,允许您内联添加客户端。虽然这看起来像是您所需要的,但您很快就会发现它不适合您的用例,因为它需要从客户端到报价的外键关系,而不是您所拥有的外键关系。提供给客户

【讨论】:

感谢您的回答。这是否意味着离开传统 django 管理应用程序的任何一步都会让我受苦?用户想要在单个页面上进行逻辑相关的更改是一种非常常见的情况。也许我可能根本不会使用 Django 来解决这类问题。你怎么看?您能否指出一个很好的 django 管理员使用开源示例,以便我可以从最佳实践中学习。

以上是关于django admin中的外键表单字段的主要内容,如果未能解决你的问题,请参考以下文章

姜戈。从表单对象访问模板中的外键字段

最初在 django 内联表单集中设置不同的外键值

Django:如何在手动表单字段中显示模型的外键对象作为选择

Django:使用原始查询来限制 ModelForm 中的外键选择字段

django 管理列表中的外键显示

通过 Django Admin 中的内联显示编辑/添加外键对象