【问题标题】:Django RecursionErrorDjango递归错误
【发布时间】:2017-07-18 18:02:24
【问题描述】:

RecursionError at /cart/ maximum recursion depth exceedede 在我看来,故障出在函数的某个地方

def get_total_price(self):
        return sum(Decimal(item['price']) * item['quantity'] for item in self.cart.values())

    def clear(self):
        # usunięcie koszyka
        del self.session[settings.CART_SESSION_ID]
        self.session.modified = True

    @property
    def delivery(self):
        if self.delivery_id:
            return Delivery.objects.get(id=self.delivery)
        return None

    def get_delivery(self):
        if self.delivery:
            return (self.delivery.cost / Decimal('100')) * self.get_total_price()

    def get_total_price_delivery(self):
        return self.get_total_price() - self.get_delivery() 

跟踪

Internal Server Error: /cart/
    Traceback (most recent call last):
      File "/home/krystian/.virtualenvs/vpw/lib/python3.5/site-packages/django/core/handlers/exception.py", line 39, in inner
        response = get_response(request)
      File "/home/krystian/.virtualenvs/vpw/lib/python3.5/site-packages/django/core/handlers/base.py", line 187, in _get_response
        response = self.process_exception_by_middleware(e, request)
      File "/home/krystian/.virtualenvs/vpw/lib/python3.5/site-packages/django/core/handlers/base.py", line 185, in _get_response
        response = wrapped_callback(request, *callback_args, **callback_kwargs)
      File "/home/krystian/Project/villain/villain/cart/views.py", line 45, in cart_detail
        'delivery_apply_form': delivery_apply_form})
      File "/home/krystian/.virtualenvs/vpw/lib/python3.5/site-packages/django/shortcuts.py", line 30, in render
        content = loader.render_to_string(template_name, context, request, using=using)
      File "/home/krystian/.virtualenvs/vpw/lib/python3.5/site-packages/django/template/loader.py", line 68, in render_to_string
        return template.render(context, request)
      File "/home/krystian/.virtualenvs/vpw/lib/python3.5/site-packages/django/template/backends/django.py", line 66, in render
        return self.template.render(context)
      File "/home/krystian/.virtualenvs/vpw/lib/python3.5/site-packages/django/template/base.py", line 208, in render
        return self._render(context)
      File "/usr/lib/python3.5/contextlib.py", line 77, in __exit__
        self.gen.throw(type, value, traceback)
      File "/home/krystian/.virtualenvs/vpw/lib/python3.5/site-packages/django/template/context.py", line 240, in bind_template
        yield
      File "/home/krystian/.virtualenvs/vpw/lib/python3.5/site-packages/django/template/base.py", line 208, in render
        return self._render(context)
      File "/home/krystian/.virtualenvs/vpw/lib/python3.5/site-packages/django/template/base.py", line 199, in _render
        return self.nodelist.render(context)
      File "/home/krystian/.virtualenvs/vpw/lib/python3.5/site-packages/django/template/base.py", line 994, in render
        bit = node.render_annotated(context)
      File "/home/krystian/.virtualenvs/vpw/lib/python3.5/site-packages/django/template/base.py", line 961, in render_annotated
        return self.render(context)
      File "/home/krystian/.virtualenvs/vpw/lib/python3.5/site-packages/django/template/loader_tags.py", line 174, in render
        return compiled_parent._render(context)
      File "/home/krystian/.virtualenvs/vpw/lib/python3.5/site-packages/django/template/base.py", line 199, in _render
        return self.nodelist.render(context)
      File "/home/krystian/.virtualenvs/vpw/lib/python3.5/site-packages/django/template/base.py", line 994, in render
        bit = node.render_annotated(context)
      File "/home/krystian/.virtualenvs/vpw/lib/python3.5/site-packages/django/template/base.py", line 961, in render_annotated
        return self.render(context)
      File "/home/krystian/.virtualenvs/vpw/lib/python3.5/site-packages/django/template/loader_tags.py", line 70, in render
        result = block.nodelist.render(context)
      File "/home/krystian/.virtualenvs/vpw/lib/python3.5/site-packages/django/template/base.py", line 994, in render
        bit = node.render_annotated(context)
      File "/home/krystian/.virtualenvs/vpw/lib/python3.5/site-packages/django/template/base.py", line 961, in render_annotated
        return self.render(context)
      File "/home/krystian/.virtualenvs/vpw/lib/python3.5/site-packages/django/template/base.py", line 1044, in render
        output = self.filter_expression.resolve(context)
      File "/home/krystian/.virtualenvs/vpw/lib/python3.5/site-packages/django/template/base.py", line 711, in resolve
        obj = self.var.resolve(context)
      File "/home/krystian/.virtualenvs/vpw/lib/python3.5/site-packages/django/template/base.py", line 852, in resolve
        value = self._resolve_lookup(context)
      File "/home/krystian/.virtualenvs/vpw/lib/python3.5/site-packages/django/template/base.py", line 915, in _resolve_lookup
        current = current()
      File "/home/krystian/Project/villain/villain/cart/cart.py", line 93, in get_delivery
        if self.delivery:
      File "/home/krystian/Project/villain/villain/cart/cart.py", line 89, in delivery
        return Delivery.objects.get(id=self.delivery)
      File "/home/krystian/Project/villain/villain/cart/cart.py", line 89, in delivery
        return Delivery.objects.get(id=self.delivery)
      File "/home/krystian/Project/villain/villain/cart/cart.py", line 89, in delivery
        return Delivery.objects.get(id=self.delivery)
      File "/home/krystian/Project/villain/villain/cart/cart.py", line 89, in delivery
        return Delivery.objects.get(id=self.delivery)
      File "/home/krystian/Project/villain/villain/cart/cart.py", line 89, in delivery
        return Delivery.objects.get(id=self.delivery)
      File "/home/krystian/Project/villain/villain/cart/cart.py", line 89, in delivery
        return Delivery.objects.get(id=self.delivery)
      File "/home/krystian/Project/villain/villain/cart/cart.py", line 89, in delivery
        return Delivery.objects.get(id=self.delivery)
      File "/home/krystian/Project/villain/villain/cart/cart.py", line 

89,发货中 return Delivery.objects.get(id=self.delivery) get 中的文件“/home/krystian/.virtualenvs/vpw/lib/python3.5/site-packages/django/db/models/manager.py”,第 193 行 如果 cls._meta.swapped: RecursionError: 超出最大递归深度

【问题讨论】:

  • 堆栈跟踪 .... ?????
  • @karthikr 我的错误我忘了添加

标签: django python-3.x django-models django-templates


【解决方案1】:

您有一个名为delivery 的属性。在该方法中,您使用 self.delivery 的值查询数据库 - 它引用您已经在其中的属性,因此它会递归调用自身而不会停止。

我不确定您要在那里引用什么,但您可能有一个同名的字段和一个属性 - 您应该重命名其中一个。

【讨论】:

  • 我已经解决了这个问题。错误是交付的函数。
【解决方案2】:

递归发生在应用程序文件夹中的 urls.py 中。例如,如果您的项目名称是“farm”并且项目中的应用程序名称是“动物”,并且您在定义应用程序的路径时使用了项目名称,则通常会发生这种情况。 在项目文件夹中定义 urls 模式的正确示例: 项目名称:农场 应用名称:动物

urlpatterns = [
path('animal/', include("animal.urls")
]

上面的意思是你安装了一个名为animal的app,当用户在web地址/animal后面输入时,应该被带到animal app urls模块进行路由。

错误示例: 示例信息:项目名称=农场,应用名称=动物

urlpatterns = [ path('farm/', include('farm.urls')]

上面的路径告诉 django 查看作为项目文件夹的农场董事会,当时正在通过农场文件夹(不是应用程序而是项目)内的 urls.py 从而遍历及以上。

【讨论】:

    猜你喜欢
    • 2018-03-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-26
    • 1970-01-01
    • 2023-03-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多