将 Django 管理“添加”界面中的字段拆分为其组成字段

Posted

技术标签:

【中文标题】将 Django 管理“添加”界面中的字段拆分为其组成字段【英文标题】:Splitting field in Django admin "Add" interface into its constituent fields 【发布时间】:2014-06-25 10:08:29 【问题描述】:

我正在使用 Django 1.6。在我的一个模型的“添加”界面中,我有一个字段是另一个模型的外键。因此,它显示为包含第二个模型的字符串表示的下拉框。我希望能够将其拆分为其组成字段。有没有办法做到这一点?

即。例如,在“用户”模型的“添加”屏幕中,我有一个字段“最喜欢的书”。 “书籍”显示为一个下拉菜单,其中包含数据库中所有书籍的字符串表示“标题,作者”,我希望能够显示两个下拉菜单,每个字段标题和作者一个。

编辑 这不是我的实际应用。在我的应用程序中,有一个附加功能,即所有作者-标题组合都是可能的(显然,本示例并非如此),因此能够分别选择标题和作者而不是从一个包含所有可能排列的巨型下拉菜单。

【问题讨论】:

【参考方案1】:

你说的没有道理。外键下拉列表代表数据库中的所有Book 对象,并允许您在User 和您选择的特定Book 之间创建关系,即特定的标题/作者组合。您不能独立选择标题和作者,因为它们是单个 Book 中的字段并代表特定的 Book(更不用说标题是文本字段)

您可以使用Django Admin Inline。您可以在this question 中看到一个内联示例:

这将允许您将多个 Books 关联到同一管理页面中的单个 User

# models.py
from django.db import models

class User(models.Model):
   name = models.CharField(max_length=100)

class Book(models.Model):
   user = models.ForeignKey(User)
   title = models.CharField(max_length=100)

# admin.py
from django.contrib import admin

class BookInline(admin.StackedInline):
    model = Book

class UserInline(admin.ModelAdmin):
    inlines = [
        BookInline,
    ]

【讨论】:

感谢您抽出宝贵时间回答我的问题。我可能不应该使用那个例子,因为我的实际情况有点不同。我想一个简单的例子至少会让事情变得更具体一些。在我的特定应用程序中,就好像每个“作者”都可以拥有一本带有每个“标题”的书。所有排列都是可能的。因此,能够从他们自己的下拉列表中选择“标题”和“作者”将非常有用,而不是搜索包含所有可能组合的单个巨大下拉列表(它们都是有效的并且已经存在于数据库中)。

以上是关于将 Django 管理“添加”界面中的字段拆分为其组成字段的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Django 管理中的字段旁边添加自定义按钮?

永远不会调用Django管理界面中的字段的只读方法

Django 中的动态表单要求

将字段添加到 Django 的现有数据库(版本 < 1.7)

Django ORM:未继承子级的字段和值。对象重复。 (使用Django管理界面)

Django 管理中的精确字段搜索