2013-02-08 16 views
0

我在我的django ModelAdmin類中有一個overritten save_model()方法。該型號有ManyToMany字段。 我save_model看起來是這樣的:django model.delete()引發ValueError - 在可以使用此多對多關係之前需要有一個字段值

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. 
+0

加入追蹤 - 感謝 – kosta5 2013-02-08 17:04:42

回答

1

難道說只是忘了打電話給超類?就像這樣:

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

好,我補充說,和它沒有解決它... - 加上超類是普通的ModelAdmin類少了點什麼,我做了我自己 - 保存()和save_m2m () – kosta5 2013-02-08 21:36:22

+0

問題可能是'save_model'在'save_formset'之前運行,它需要一個剛在'save_model'中刪除的實例。然而,在這種情況下,我會期待'ValidationError',所以我有點難住。 – 2013-02-08 22:27:21

+0

是的...我認爲畢竟這不是一個很好的方法...我會嘗試重寫它到驗證錯誤(在我的表單類中) – kosta5 2013-02-08 22:29:57

相關問題