Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/19.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
Python django model.delete()引发ValueError-在使用此多对多关系之前,需要为字段设置一个值_Python_Django - Fatal编程技术网

Python django model.delete()引发ValueError-在使用此多对多关系之前,需要为字段设置一个值

Python django model.delete()引发ValueError-在使用此多对多关系之前,需要为字段设置一个值,python,django,Python,Django,在django ModelAdmin类中,我有一个超写的save_model()方法。此模型有一个manytomy字段。 我的save_模型如下所示: def save_model(self, request, obj, form, change): creating = False to_delete = False if not obj.pk: creating = True obj.save()

在django ModelAdmin类中,我有一个超写的
save_model()
方法。此模型有一个
manytomy
字段。 我的
save_模型
如下所示:

def save_model(self, request, obj, form, change):
        creating = False
        to_delete = False
        if not obj.pk:
            creating = True
        obj.save()
        form.save_m2m()
        # DETECT SOMETHING (some complicated conditions) HERE ...
        detected =True
        if detected:
           obj.delete() # --> here is my problem

Traceback:
File "/Library/Python/2.7/site-packages/django/core/handlers/base.py" in get_response
  111.                         response = callback(request, *callback_args, **callback_kwargs)
File "/Library/Python/2.7/site-packages/django/contrib/admin/options.py" in wrapper
  366.                 return self.admin_site.admin_view(view)(*args, **kwargs)
File "/Library/Python/2.7/site-packages/django/utils/decorators.py" in _wrapped_view
  91.                     response = view_func(request, *args, **kwargs)
File "/Library/Python/2.7/site-packages/django/views/decorators/cache.py" in _wrapped_view_func
  89.         response = view_func(request, *args, **kwargs)
File "/Library/Python/2.7/site-packages/django/contrib/admin/sites.py" in inner
  196.             return view(request, *args, **kwargs)
File "/Library/Python/2.7/site-packages/django/utils/decorators.py" in _wrapper
  25.             return bound_func(*args, **kwargs)
File "/Library/Python/2.7/site-packages/django/utils/decorators.py" in _wrapped_view
  91.                     response = view_func(request, *args, **kwargs)
File "/Library/Python/2.7/site-packages/django/utils/decorators.py" in bound_func
  21.                 return func(self, *args2, **kwargs2)
File "/Library/Python/2.7/site-packages/django/db/transaction.py" in inner
  209.                 return func(*args, **kwargs)
File "/Library/Python/2.7/site-packages/django/contrib/admin/options.py" in add_view
  956.                 self.save_related(request, form, formsets, False)
File "/Library/Python/2.7/site-packages/django/contrib/admin/options.py" in save_related
  731.         form.save_m2m()
File "/Library/Python/2.7/site-packages/django/forms/models.py" in save_m2m
  83.                 f.save_form_data(instance, cleaned_data[f.name])
File "/Library/Python/2.7/site-packages/django/db/models/fields/related.py" in save_form_data
  1273.         setattr(instance, self.attname, data)
File "/Library/Python/2.7/site-packages/django/db/models/fields/related.py" in __set__
  859.         manager = self.__get__(instance)
File "/Library/Python/2.7/site-packages/django/db/models/fields/related.py" in __get__
  846.             through=self.field.rel.through,
File "/Library/Python/2.7/site-packages/django/db/models/fields/related.py" in __init__
  538.                                  (instance, source_field_name))

Exception Type: ValueError at /admin/lawis_core/invoice/add/
Exception Value: "<Invoice: 1301000>" needs to have a value for field "invoice" before this many-to-many relationship can be used.
def save_模型(自我、请求、对象、表单、更改):
创建=假
删除=错误
如果不是obj.pk:
创建=真
obj.save()
表单.保存_m2m()
#在这里检测到一些东西(一些复杂的情况)。。。
检测到=真
如果检测到:
obj.delete()#-->这是我的问题
回溯:
get_响应中的文件“/Library/Python/2.7/site packages/django/core/handlers/base.py”
111响应=回调(请求,*回调参数,**回调参数)
包装器中的文件“/Library/Python/2.7/site packages/django/contrib/admin/options.py”
366返回self.admin\u site.admin\u视图(视图)(*args,**kwargs)
视图中的文件“/Library/Python/2.7/site packages/django/utils/decorators.py”
91响应=查看功能(请求,*args,**kwargs)
文件“/Library/Python/2.7/site packages/django/views/decorators/cache.py”
89响应=查看功能(请求,*args,**kwargs)
文件“/Library/Python/2.7/site packages/django/contrib/admin/sites.py”,位于内部
196返回视图(请求、*args、**kwargs)
包装器中的文件“/Library/Python/2.7/site packages/django/utils/decorators.py”
25返回边界函数(*args,**kwargs)
视图中的文件“/Library/Python/2.7/site packages/django/utils/decorators.py”
91响应=查看功能(请求,*args,**kwargs)
绑定函数中的文件“/Library/Python/2.7/site packages/django/utils/decorators.py”
21返回函数(self,*args2,**kwargs2)
文件“/Library/Python/2.7/site packages/django/db/transaction.py”,位于内部
209返回函数(*args,**kwargs)
添加视图中的文件“/Library/Python/2.7/site packages/django/contrib/admin/options.py”
956与self.save_相关(请求、表单、表单集、False)
文件“/Library/Python/2.7/site packages/django/contrib/admin/options.py”,位于与save_相关的
731表单.保存_m2m()
save_m2m中的文件“/Library/Python/2.7/site packages/django/forms/models.py”
83f、 保存表单数据(实例,已清理的表单数据[f.name])
保存表单数据中的文件“/Library/Python/2.7/site packages/django/db/models/fields/related.py”
1273setattr(实例、self.attname、数据)
文件“/Library/Python/2.7/site packages/django/db/models/fields/related.py”位于__
859manager=self.\uuu获取\uu(实例)
文件“/Library/Python/2.7/site packages/django/db/models/fields/related.py”位于__
846through=self.field.rel.through,
init中的文件“/Library/Python/2.7/site packages/django/db/models/fields/related.py”__
538(实例,源\字段\名称))
异常类型:ValueError位于/admin/lawis\u core/invoice/add/
异常值:“发票”字段需要有一个值才能使用此多对多关系。

是不是忘了调用超级类?像这样:

class YourAdmin(admin.ModelAdmin)
    def save_model(self, request, obj, form, change):
        super(YourAdmin, self).save_model(request, obj, form, change)  
        # Your code ...

添加了回溯-我添加了这一点,但它没有修复它…-另外,这个超级类是常规的modelAdmin类,它只执行我自己做的操作-save()和save_m2m()。问题可能是,
save_model
save_formset
之前运行,
save_model
需要一个您刚刚在
save_model
中删除的实例。然而,在这种情况下,我本以为会出现
验证错误
,所以我有点不知所措。是的。。。我认为这毕竟不是一个很好的方法。。。我将尝试将其重写为验证错误(在清除我的表单类时),我遇到了相同的问题,并在保存所有表单集和m2m时,在
save_related
的末尾处理
obj.delete