代码之家  ›  专栏  ›  技术社区  ›  HenryM

Django Admin-“bool”对象不可调用

  •  0
  • HenryM  · 技术社区  · 5 年前

    当我尝试删除Django Admin中的记录时,对于某些记录,我得到

    我无法根据这个回溯找出错误在哪里。

    Traceback:
    
    File "/home/henry/Documents/Sites/Development/django-authenticjobs/env/lib/python3.6/site-packages/django/core/handlers/exception.py" in inner
      35.             response = get_response(request)
    
    File "/home/henry/Documents/Sites/Development/django-authenticjobs/env/lib/python3.6/site-packages/django/core/handlers/base.py" in _get_response
      128.                 response = self.process_exception_by_middleware(e, request)
    
    File "/home/henry/Documents/Sites/Development/django-authenticjobs/env/lib/python3.6/site-packages/django/core/handlers/base.py" in _get_response
      126.                 response = wrapped_callback(request, *callback_args, **callback_kwargs)
    
    File "/home/henry/Documents/Sites/Development/django-authenticjobs/env/lib/python3.6/site-packages/django/contrib/admin/options.py" in wrapper
      575.                 return self.admin_site.admin_view(view)(*args, **kwargs)
    
    File "/home/henry/Documents/Sites/Development/django-authenticjobs/env/lib/python3.6/site-packages/django/utils/decorators.py" in _wrapped_view
      142.                     response = view_func(request, *args, **kwargs)
    
    File "/home/henry/Documents/Sites/Development/django-authenticjobs/env/lib/python3.6/site-packages/django/views/decorators/cache.py" in _wrapped_view_func
      44.         response = view_func(request, *args, **kwargs)
    
    File "/home/henry/Documents/Sites/Development/django-authenticjobs/env/lib/python3.6/site-packages/django/contrib/admin/sites.py" in inner
      223.             return view(request, *args, **kwargs)
    
    File "/home/henry/Documents/Sites/Development/django-authenticjobs/env/lib/python3.6/site-packages/django/utils/decorators.py" in _wrapper
      62.             return bound_func(*args, **kwargs)
    
    File "/home/henry/Documents/Sites/Development/django-authenticjobs/env/lib/python3.6/site-packages/django/utils/decorators.py" in _wrapped_view
      142.                     response = view_func(request, *args, **kwargs)
    
    File "/home/henry/Documents/Sites/Development/django-authenticjobs/env/lib/python3.6/site-packages/django/utils/decorators.py" in bound_func
      58.                 return func.__get__(self, type(self))(*args2, **kwargs2)
    
    File "/home/henry/Documents/Sites/Development/django-authenticjobs/env/lib/python3.6/site-packages/django/contrib/admin/options.py" in delete_view
      1736.             return self._delete_view(request, object_id, extra_context)
    
    File "/home/henry/Documents/Sites/Development/django-authenticjobs/env/lib/python3.6/site-packages/django/contrib/admin/options.py" in _delete_view
      1760.             [obj], opts, request.user, self.admin_site, using)
    
    File "/home/henry/Documents/Sites/Development/django-authenticjobs/env/lib/python3.6/site-packages/django/contrib/admin/utils.py" in get_deleted_objects
      131.     collector.collect(objs)
    
    File "/home/henry/Documents/Sites/Development/django-authenticjobs/env/lib/python3.6/site-packages/django/contrib/admin/utils.py" in collect
      195.             return super().collect(objs, source_attr=source_attr, **kwargs)
    
    File "/home/henry/Documents/Sites/Development/django-authenticjobs/env/lib/python3.6/site-packages/django/db/models/deletion.py" in collect
      222.                         field.remote_field.on_delete(self, field, sub_objs, self.using)
    
    Exception Type: TypeError at /admin/jobboard/job/155/delete/
    Exception Value: 'bool' object is not callable
    

    有人能建议去哪里看看吗?谢谢你

    0 回复  |  直到 5 年前
        1
  •  3
  •   willeM_ Van Onsem    5 年前

    你已经设置了一个 on_delete ForeignKey OneToOneField 一个布尔值( True False ). 比如说:

    class SomeModel(models.Model):
        some_fk = models.ForeignKey(OtherModel, on_delete=False)

    不能将其设置为布尔值。可以将中列出的值设置为 documentation : CASCADE , PROTECT , SET_NULL , SET_DEFAULT , SET(..) ,或 DO_NOTHING .

    严格地说,您也可以实现自己的策略,因为上面列出的策略实际上只是函数。例如 CASCADE is implemented like [GitHub] :

    def CASCADE(collector, field, sub_objs, using):
        collector.collect(sub_objs, source=field.remote_field.model,
                          source_attr=field.name, nullable=field.null)
        if field.null and not connections[using].features.can_defer_constraint_checks:
            collector.add_field_update(field, None, sub_objs)

    虽然您可能不需要实现您自己的,并从文档中列出的其中一个中选择一个。例如:

    class SomeModel(models.Model):
        some_fk = models.ForeignKey(OtherModel, on_delete=models.CASCADE)