【问题标题】:Maximum recursion depth while applying a Listing filter in django在 django 中提供意外结果的列表过滤器
【发布时间】:2022-09-26 17:12:51
【问题描述】:

我正在尝试从 django 过滤器中实现列表过滤器。第一个 \"type\" 是我希望我的过滤器基于的属性模型.py我的应用程序。

class detaileditems(models.Model):
    title = models.CharField(max_length= 255)
    type = models.CharField(max_length= 45, null=True)
    pubdate = models.DateTimeField()
    body = models.TextField()
    image = models.ImageField(upload_to= \'images/\')

我创建了一个单独的过滤器.py在我调用过滤器的应用程序中。

import django_filters
from .models import detaileditems
class ListingFilters(django_filters.FilterSet):
    class Meta:
        model = detaileditems
        fields = {\'type\': [\'exact\']}

接下来是我里面的函数视图.py文件-

from .models import detaileditems
from .filters import ListingFilters
def alldetailed2(request):
    items = detaileditems.objects
    listing_filter = ListingFilters(request.GET, queryset=items)
    context = {
        \'listing_filter\' : listing_filter,
        \'items\': items,
    }
    return render(request, \'detailed2/detailed2.html\',context)

最后在我的 html 文件中 \"详细2.html\" 位于 \"detailed2\" 的应用程序模板文件夹中。

<div class = \"col-lg-6 col-md-8 mx-auto\">
    <form method = \"get\">
            {{ listing_filter.form }}
            <button class=\"btn btn-sm btn-danger\" type=\"submit\">Search</button>
         </form>
</div>
<div class = \"container\">
     <div class = \"row row-cols-1 row-cols-sm2 row-cols-md-3 g-3\">
          {% for listing in listing_filter.qs %}
          <div class = \"col\">
               {% url \'alldetailed2\' %}
          </div>
           {% endfor %}
      </div>
</div>

我将其作为输出,其中同一页面未使用过滤结果进行更新。

这是我的文件夹结构,以便更好地理解。

    标签: python django loops recursion filter


    【解决方案1】:

    我确实在 html 中看到了一个自我引用:

    ''' {% 包括 "detailed2/detailed2.html" %} '''

    这可能是你麻烦的根本原因吗?

    【讨论】:

    • 是的,递归问题没有出现页面加载没有错误,但搜索结果没有出现?知道为什么吗?
    • 唉,我不认识姜戈。我在自己的编程中遇到了最大递归限制,所以这就是吸引我来到这里的原因。
    【解决方案2】:

    之前有一篇关于最大递归深度的文章: earlier post

    有时可以通过重新考虑算法找到解决方案,因此它使用迭代例如列表而不是递归。我想你需要说服自己你没有犯错误,然后向 Django 提出问题。

    作为快速修复,您可以尝试增加递归深度。请参阅我链接到的帖子。

    【讨论】:

    • 我试图增加递归深度,但这根本不起作用,页面无法加载。
    【解决方案3】:

    views.py 中,OP 在获取物品时需要确保 OP 到底有.all()

    def alldetailed2(request):
        items = detaileditems.objects.all()
    

    请记住还有guidelines in the way one names classes, functions, ...

    Django 模型应该使用CapWords 约定。此外,它被考虑和anti-pattern to use model classes with a plural name。所以,DetailedItem 而不是 detaileditems

    函数名称应为小写,单词之间用下划线分隔,例如 all_detailed_2 而不是 alldetailed2

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-07-13
      • 2020-02-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-07-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多