我有一个模型 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/