Django 1.5 管理后台中内联额外字段

14 投票
5 回答
10421 浏览
提问于 2025-04-17 18:55

我有一些模型里面包含了很多内联字段。因为并不是每个对象都需要所有的内联字段,所以我把内联模型设置为 extra = 0,这样在内联部分就会出现一个小的 add + 按钮。

不过,这在django 1.5中似乎不再有效。如果设置了 extra = 0,那么内联部分就不能再编辑了。

有没有办法让1.4的功能在1.5中也能用呢?

示例代码:

class ModelInline(admin.StackedInline):
    model = MyModel
    extra = 0

class OtherModelAdmin(admin.ModelAdmin)
    inlines = [ModelInline]

admin.site.register(OtherModel, OtherModelAdmin)

编辑(一些界面):

Django 1.4:

django 1.4 extra=0

Django 1.5:

enter image description here

(Hinzufügen == 添加)

5 个回答

0

更好的解决办法是重写内联本身的 get_extra 方法。这在 Django 1.9 中是有效的,不过我不能确定在更早的版本中是否也能这样做。

2

我遇到了同样的问题,因为我把静态的管理内容放在了一个不在Django安装目录里的文件夹里。把Django 1.5的静态内容从django/contrib/admin/static/admin/js/复制到STATIC_ROOT/admin/js里,就解决了这个问题。

8

这件事之前已经发生过了。

The new javascript made this impossible because the "Add Another" button 
was controlled by max_num, and ignored a value of 0.
The javascript ignored a value of 0 because max_num has a default value of 0, 
and all the code using it had taken to equating max_num = 0 with being "off". 
So you can't actually have a maximum of 0. It's not possible.

有个叫Gabrial Hurley的人做了一个补丁,可以恢复想要的功能,而且不会影响其他东西。这是三年前的事情,我不知道这个补丁在Django 1.5上是否还有效。你可以试试看 :)

https://code.djangoproject.com/attachment/ticket/13023/13023_inlines_patch.diff

这是关于同一个bug的记录(三年前的):

https://code.djangoproject.com/ticket/13023

撰写回答