Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Django admin error ValidationError:[';ManagementForm数据丢失或由于有条件的内联使用而被篡改_Django_Django Models_Django Admin_Django Admin Tools - Fatal编程技术网

Django admin error ValidationError:[';ManagementForm数据丢失或由于有条件的内联使用而被篡改

Django admin error ValidationError:[';ManagementForm数据丢失或由于有条件的内联使用而被篡改,django,django-models,django-admin,django-admin-tools,Django,Django Models,Django Admin,Django Admin Tools,我有一个自定义的User模型(AbstractUser)和一个Stock模型。假设有多个用户角色经理、供应商等。经理可以查看其他经理的详细信息和供应商详细信息 用户模型得到了一个条件内联,如果用户角色等于供应商,则显示每个供应商的库存(这里的角色是一个PositiveSmallIntegerField,带有选项和供应商=2) 在我尝试将新用户的角色更改为supplier之前,这一切都很正常 ValidationError: ['ManagementForm data is missing or

我有一个自定义的
User
模型(
AbstractUser
)和一个
Stock
模型。假设有多个用户角色
经理、供应商等。经理可以查看其他经理的详细信息和供应商详细信息

用户
模型得到了一个条件内联,如果用户角色等于
供应商
,则显示每个供应商的库存(这里的角色是一个
PositiveSmallIntegerField
,带有选项和
供应商=2

在我尝试将新用户的角色更改为
supplier
之前,这一切都很正常

ValidationError: ['ManagementForm data is missing or has been tampered with']
该问题是由该重写方法引起的。当我注释掉
get_inlines()
时,它可以正常工作,并且这只发生在角色
supplier
上。我试图解决这个问题,但没有找到解决办法


希望得到解决问题的指导,提前感谢。

经过数小时的研究,终于找到了一个解决方案,尽管我无法确切解释为什么会发生这种情况(可能与没有相关的库存实例以及在转换为角色供应商时突然与库存实例有关系有关)

无论如何,不是重写
get\u inlines()
方法,而是重写并使用条件方法可以解决问题

class UserAdmin(admin.ModelAdmin):
    ...
    inlines = []

    def change_view(self, request, object_id, form_url='', extra_context=None):
        self.inlines = []
    
        try:
            obj = self.model.objects.get(pk=object_id)
        except self.model.DoesNotExist:
            pass
        else:
            if obj.role == SUPPLIER:
                self.inlines = [SupplierStockInline,]
        return super(UserAdmin, self).change_view(request, object_id, form_url, extra_context)
class UserAdmin(admin.ModelAdmin):
    ...
    inlines = []

    def change_view(self, request, object_id, form_url='', extra_context=None):
        self.inlines = []
    
        try:
            obj = self.model.objects.get(pk=object_id)
        except self.model.DoesNotExist:
            pass
        else:
            if obj.role == SUPPLIER:
                self.inlines = [SupplierStockInline,]
        return super(UserAdmin, self).change_view(request, object_id, form_url, extra_context)