Javascript Django Admin StackedLine未加载添加另一个模型,未捕获类型错误:无法读取属性';fn';未定义的
当我向我的Javascript Django Admin StackedLine未加载添加另一个模型,未捕获类型错误:无法读取属性';fn';未定义的,javascript,python,django,python-3.x,Javascript,Python,Django,Python 3.x,当我向我的django admin添加许多内联线时,如下图所示,添加另一个{model name}将消失。如果我检查javascript控制台,我会看到以下错误: 未捕获的TypeError:无法读取未定义的属性“fn” 在inlines.js:20 在inlines.js:295 这是我的Django管理员: @admin.register(models.Paper) class PaperAdmin(BaseLiteratureAdmin): class EditedPaperAd
django admin
添加许多内联线时,如下图所示,添加另一个{model name}
将消失。如果我检查javascript控制台,我会看到以下错误:
未捕获的TypeError:无法读取未定义的属性“fn”
在inlines.js:20
在inlines.js:295
这是我的Django管理员:
@admin.register(models.Paper)
class PaperAdmin(BaseLiteratureAdmin):
class EditedPaperAdminInline(admin.StackedInline):
model = models.EditedPaper
extra = 0
class SupplementaryInformationAdminInline(admin.StackedInline):
model = models.SupplementaryInformation
extra = 0
class PaperNotesAdminInline(BaseNotesAdminInline):
exclude = tuple(
i for i in BaseNotesAdminInline.exclude if i != 'paper'
)
class ReferencedPaperInline(admin.StackedInline):
model = models.Paper.referenced_papers.through
extra = 0
fk_name = 'from_paper'
verbose_name = "Referenced Paper"
verbose_name_plural = "Referenced Papers"
inlines = (
EditedPaperAdminInline, # problem
PaperNotesAdminInline, # ok single/together
ReferencedPaperInline, # ok single/together
SupplementaryInformationAdminInline, # problem
)
以下是我想看到的:
以下是我看到的:
我找到了解决方案--在inlines
列表中更改inlines的顺序,如下所示:
inlines = (
PaperNotesAdminInline, # ok single/together
ReferencedPaperInline, # ok single/together
EditedPaperAdminInline, # problem
SupplementaryInformationAdminInline, # problem
)
每个内联注释旁边的#注释表明PaperNotesAdminInline
和ReferencedPaperInline
都是“OK”的,因为添加另一个{model name}
链接(如果包括它们)仍然出现。如果按照管理模型定义中所示的顺序添加其他两个内联,则会导致JavaScript错误和每个内联的链接消失。但是,如果我将顺序更改为第二个inlines
列表,则所有内容都会正确加载
这是怎么回事?我的项目也有同样的问题,在jQuery之前加载了一个大型富表单脚本inline.js,并产生了一个错误。 我将changed inline.js添加到我的项目文件夹中,它检查jQuery是否加载,如果没有加载,它将等待300毫秒,然后重试。 在这里打补丁
--- django/contrib/admin/static/admin/js/inlines.js
+++ myproject/myproject/static/admin/js/inlines.js
@@ -15,7 +15,8 @@
* Licensed under the New BSD License
* See: http://www.opensource.org/licenses/bsd-license.php
*/
-(function($) {
+
+function start_inline($) {
'use strict';
$.fn.formset = function(opts) {
var options = $.extend({}, $.fn.formset.defaults, opts);
@@ -292,4 +293,16 @@
}
});
});
-})(django.jQuery);
+};
+
+function start_inline_loader() {
+ try {
+ start_inline(django.jQuery);
+
+ } catch(e) {
+ console.log('no jQuery, try again after 300 mc');
+ setTimeout( function() {start_inline_loader();}, 300)
+ }
+}
+
+start_inline_loader();