带有空白表的 Django 2.1 admin.py changeform_view 方法错误

Posted

技术标签:

【中文标题】带有空白表的 Django 2.1 admin.py changeform_view 方法错误【英文标题】:Django 2.1 admin.py changeform_view method error with blank tables 【发布时间】:2020-01-11 18:38:11 【问题描述】:

在我的 admin.py 中,我使用 changeform_view 方法在保存后将一些数据保存到添加表单中 例如,我的管理课程之一是:

class temp_mainAdmin(admin.ModelAdmin):

    form = TempMainForm

    list_filter = ('t_type',)
    list_display = ('descr', 't_type', 'notes', 'dt', 'active')

    def save_model(self, request, obj, form, change):
        obj.user = request.user
        super(temp_mainAdmin, self).save_model(request, obj, form, change)

    def changeform_view(self, request, obj_id, form_url, extra_context=None):

        try:            
            l_mod = temp_main.objects.latest('id')

            extra_context = 
                'lmod': l_mod,
                'oId': obj_id
            

            return super(temp_mainAdmin, self).changeform_view(request, obj_id,form_url, extra_context=extra_context)
    except Exception:
        pass


admin.site.register(temp_main, temp_mainAdmin, )

关键是,如果 temp_main 表至少有一条记录,则一切都已完成,但如果表为空白,当我尝试打开“添加”表单时,我收到错误

DoesNotExist 在 /admin/backend/temp_main/add/ temp_add 匹配的查询不存在。

如果我从我的班级中删除了整个 changeform_view 方法,除了按下“保存并添加另一个”之后我没有填充我的字段这一事实之外,一切都已完成。

我的 changeform_view 方法有问题吗?

ps:我使用 PostgreeSQL 作为后端数据库

提前非常感谢

【问题讨论】:

【参考方案1】:

您可以在方法内部以这种方式检查查询:

try:
    l_mod = temp_main.objects.latest('id')
except Exception:
    l_mod = None

【讨论】:

【参考方案2】:

保存后插入数据库前的操作可以使用pre_save和signal方法......

您还可以需要模型字段 blank=true ....

这里是文档.... docs.djangoproject.com

【讨论】:

以上是关于带有空白表的 Django 2.1 admin.py changeform_view 方法错误的主要内容,如果未能解决你的问题,请参考以下文章

Django,如何从模型表单的选择字段中删除空白选择?

Django trigram_similar搜索没有返回结果(带有Postgresql 10.5后端的Django 2.1)

带有 MySQL 非事务性更改表的 Django 无法回滚

django modelform 为空显示空白

自定义/删除 Django 选择框空白选项

django positiveinteger 默认值为空白