【问题标题】:DRF - Getting 'NoneType object is not callable' error on delete instance from ModelViewSetDRF - 从 ModelViewSet 删除实例时出现“NoneType object is not callable”错误
【发布时间】:2021-02-15 15:24:16
【问题描述】:

当我尝试删除 Warehouse 实例时遇到 TypeError。

注意:如果我删除Shop实例,需要删除该Shop下的Warehouse,这就是我使用on_delete=models.CASCADE的原因。

class Warehouse(models.Model):
    """Warehouse model"""

    name = models.CharField(max_length=255)
    shop = models.ForeignKey(Shop, on_delete=models.CASCADE)


class WarehouseViewSet(viewsets.ModelViewSet):
    """Viewset"""

    queryset = models.Warehouse.objects.all()
    serializer_class = serializers.WarehouseSerializer

错误:

TypeError: 'NoneType' object is not callable
[14/Feb/2021 22:10:46] "DELETE /api/v1/shop/warehouse/2/ HTTP/1.1" 500 113266
Internal Server Error: /api/v1/shop/warehouse/2/
Traceback (most recent call last):
  File "C:\Python38\lib\site-packages\django\core\handlers\exception.py", line 34, in inner
    response = get_response(request)
  File "C:\Python38\lib\site-packages\django\core\handlers\base.py", line 115, in _get_response
    response = self.process_exception_by_middleware(e, request)
  File "C:\Python38\lib\site-packages\django\core\handlers\base.py", line 113, in _get_response
    response = wrapped_callback(request, *callback_args, **callback_kwargs)
  File "C:\Python38\lib\site-packages\django\views\decorators\csrf.py", line 54, in wrapped_view
    return view_func(*args, **kwargs)
  File "C:\Python38\lib\site-packages\rest_framework\viewsets.py", line 114, in view
    return self.dispatch(request, *args, **kwargs)
  File "C:\Python38\lib\site-packages\rest_framework\views.py", line 505, in dispatch
    response = self.handle_exception(exc)
  File "C:\Python38\lib\site-packages\rest_framework\views.py", line 465, in handle_exception
    self.raise_uncaught_exception(exc)
  File "C:\Python38\lib\site-packages\rest_framework\views.py", line 476, in raise_uncaught_exception
    raise exc
  File "C:\Python38\lib\site-packages\rest_framework\views.py", line 502, in dispatch
    response = handler(request, *args, **kwargs)
  File "C:\Python38\lib\site-packages\rest_framework\mixins.py", line 91, in destroy
    self.perform_destroy(instance)
  File "C:\Python38\lib\site-packages\rest_framework\mixins.py", line 95, in perform_destroy
    instance.delete()
  File "C:\Python38\lib\site-packages\django\db\models\base.py", line 921, in delete
    collector.collect([self], keep_parents=keep_parents)
  File "C:\Python38\lib\site-packages\django\db\models\deletion.py", line 224, in collect
    field.remote_field.on_delete(self, field, sub_objs, self.using)

【问题讨论】:

    标签: postgresql django-rest-framework


    【解决方案1】:

    找到了解决办法。我没有处理儿童模型的on_delete

    解决方案

    class WarehouseChildren(models.Model):
        data = models.PositiveIntegerField(default=0)
        warehouse = models.ForeignKey(Warehouse, on_delete=models.SET_NULL, null=True)
    

    class WarehouseChildren(models.Model):
        data = models.PositiveIntegerField(default=0)
        warehouse = models.ForeignKey(Warehouse, on_delete=models.CASCADE)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-01-18
      • 1970-01-01
      • 2021-09-01
      • 2019-10-08
      • 2020-03-09
      • 2018-01-23
      • 2016-03-25
      相关资源
      最近更新 更多