python - 使用 `raw_id_fields`在管理中选择相关对象

标签 python django

我有一个模型 Item,它有一个指向 Category 的外键。

Category 管理页面中,我希望能够选择现有的 Item 对象并对其进行修改。

class Item(models.Model):
    name = models.CharField(max_length=63)
    category = models.ForeignKey('Category', null=True, related_name="items")

class Category(models.Model):
    name = models.CharField(max_length=63)

我尝试过以这种方式设置管理,但它只是显示空白内联,没有放大镜或选择下拉列表以从现有 Item 实例中进行选择。

class ItemInline(admin.StackedInline):
    model = Item
    allow_add = True
    raw_id_fields = ('category',)

class CategoryAdmin(admin.ModelAdmin):
    list_display = ['name']
    inlines = [
        ItemInline
    ]
    # also tried putting raw_id_fields = ('items',)  here
    # but it prompts an error saying 'CategoryAdmin.raw_id_fields' refers to field 'items' that is missing from model 'Category'.

最佳答案

您似乎误解了该链接的工作原理。 Django 不提供反向外键选择。从 Item 管理中,您可以像这样选择Category。但反之则不然。

一种解决方法是使用添加自定义小部件的项目,例如 Django Tags Input这会向您的管理员添加一个类似标签的输入字段。

在这种情况下,配置将如下所示:

settings.py

INSTALLED_APPS = (
    # ... your other installed apps
    'tags_input',
)

TAGS_INPUT_MAPPINGS = {
    'your_app.Item': {
        'field': 'name',
    },
}

admin.py

from tags_input import admin as tags_input_admin

class CategoryAdmin(tags_input_admin.TagsInputAdmin):
    list_display = ['name']

urls.py

from django.conf import urls

urlpatterns = patterns('',
    url(r'^tags_input/', include('tags_input.urls', namespace='tags_input')),
    # ... other urls ...
)

PS:要轻松创建功能齐全的 Django 管理配置,请尝试 Django Admin Generator包。

免责声明:链接的项目是我编写的。

关于python - 使用 `raw_id_fields`在管理中选择相关对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26999827/

相关文章:

python - 连接两个具有相同分区数但不同列数的数据框(dask)

python - 如何在具有图例和次要 y 轴的同一图上绘制两个 Pandas 时间序列?

python - 如何在 Python 中执行 Curl

python - Django 管理中的多对多问题

python - Django objects.filter() values_list() vs python list comprehension for __in query

python - 具有声明性基础的 SQLAlchemy 临时表

python - 在 pybind11 中使用 opencv 类型

Django REST框架: Validate before a delete

python - 创建 django 表单对象并保存

Python Django 1.7 Ubuntu 14.04 如何在 azure 上部署 django 站点?