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)