我有一个带有内联的直接 admin.ModelAdmin 类,其中我使用 forms.Model 和 BaseInlineFormset 覆盖表单和表单集以添加自定义字段。我有一个加载的自定义 jQuery 脚本,每当从 select2 下拉列表中选择一台机器时,它都会对 REST API 运行 AJAX 查询,并根据外键值获取项目并使用信息填充 CleanEntryInline。但是,保存后它只会将一条记录发布到数据库。class CleaningEntryInline(admin.TabularInline): model = CleaningEntry form = CleaningEntryForm formset = CleaningEntryFormSet extra = 0 raw_id_fields = ['cleaning_item'] fieldsets = [ (None,{'fields':[('cleaning_item','cleaning_action', 'checked', 'na', 'notes')]}) ] template = 'admin/quality/cleaningentry/edit_inline/tabular_actions.html'class CleaningLogAdmin(admin.ModelAdmin): ####Save model function override to make and save QC Lab user and make uneditable. def save_model(self, request, obj, form, change): obj.lab_user = request.user.username obj.save() list_display = ['machine_used','get_product_info','lot_num','start_time','lab_user'] list_filter = ['machine_used'] readonly_fields = ['lab_user', 'cleaning_users'] search_fields = ['machine_cleaned', 'lot_num', 'recipe_cleaned__recipe_name__item_code', 'lab_user'] autocomplete_fields = ['machine_used','recipe_cleaned'] fieldsets = [ ('Cleaning Info',{'fields':[('machine_used', 'recipe_cleaned', 'lot_num')]}), (None,{'fields':[('start_time')]}), (None,{'fields':[('clean_time', 'lab_user')]}) ]我已经尝试过覆盖save_formset() 之类的方法,但我不完全确定这是一个 Django 问题,并且想知道这是否不是由于命名空间造成的?如果我在 ajax 调用后使用“添加另一个”按钮手动附加行,然后单击“保存并继续”或“保存”并检查 POST 表单正在提交所有内联,但它只保存列出的第一条记录和所有我手动添加的记录。
1 回答
喵喔喔
TA贡献1735条经验 获得超5个赞
在再次查看代码并查看 POST 数据后,根据@dirkgroten 请求,我注意到在 POST 上,我使用的 .replace() 正则表达式没有正确地将索引映射到表单:
new_row = $(row_container[0].outerHTML.replace(/log_entry-0/,'log_entry-'+i));
本来应该:
new_row = $(row_container[0].outerHTML.replace(/log_entry-0/吉,'log_entry-'+i));
当页面映射数据而不是内联中每一行的记录时,如下所示:
log_entry-0-cleaning_item:1
log_entry-1-cleaning_item:2
log_entry-2-cleaning_item:3
它将多个值映射到 jQuery 创建的同一个内联对象:
log_entry-0-cleaning_item:
[0]:1
[0]:2
[0]:3
添加回答
举报
0/150
提交
取消