Ric*_*ard 5 django many-to-many django-admin
在 Django 管理中,我真的希望能够在列表显示中显示可编辑的 ManyToManyField。
它不一定需要是完整的 ManyToManyField 控件 - 能够仅保存一个值就足以满足列表显示的目的(尽管底层值本质上是多对多)。
我的模型如下所示:
class Item(models.Model):
name = models.CharField(max_length=500)
colour = models.ManyToManyField(Colour, related_name='primary_colour')
Run Code Online (Sandbox Code Playgroud)
如果我尝试这样做admin.py:
class ItemAdmin(admin.ModelAdmin):
list_display = ('name', 'colour')
list_editable = ('colour')
Run Code Online (Sandbox Code Playgroud)
然后我得到这个错误:
'ItemAdmin.list_display[6]', 'colour' is a ManyToManyField which is not supported.
Run Code Online (Sandbox Code Playgroud)
有什么方法可以显示可编辑的 ManyToManyField 以便在列表显示中快速编辑吗?
我发现了这个相关问题,它解释了如何使值在列表显示中可见,但不可编辑:ManyToManyField widget in a django admin change list?
您可以轻松地将自定义视图添加到管理网址并添加所需的 html/javascript/ajax。基础知识如下:
class ItemAdmin(admin.ModelAdmin):
# regular stuff
def render_foo(self, obj):
# add this to your list_display
html = '<stuff><input/submit action></stuff>'
return mark_safe(html)
def get_urls(self):
urls = super(ItemAdmin, self).get_urls()
extra_urls = patterns('',
(r'^process_foo/$', self.admin_site.admin_view(self.process_foo)),
)
return extra_urls + urls
def process_foo(self, request):
if not request.is_ajax():
raise Http404
foo = request.GET.get("attr")
# process m2m
# return some json
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4040 次 |
| 最近记录: |