我有一个模型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'.
答案 0 :(得分:1)
您似乎误解了链接的工作原理。 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 admin配置,请尝试Django Admin Generator包。
免责声明:链接的项目是我写的。