覆盖 Django 管理内联表单集不会保存超过 1 行

我有一个带有内联的直接 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 表单正在提交所有内联,但它只保存列出的第一条记录和所有我手动添加的记录。


阿波罗的战车
浏览 77回答 1
1回答

喵喔喔

在再次查看代码并查看 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:1log_entry-1-cleaning_item:2log_entry-2-cleaning_item:3它将多个值映射到 jQuery 创建的同一个内联对象:log_entry-0-cleaning_item: [0]:1[0]:2[0]:3
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python