我正在尝试在 Django 中创建一个查询,该查询调用distinct满足过滤器某些条件(使用)的唯一行(使用filter)
这是使用的文件:
\n\n视图.py
\n\ndef cat_details(request, pk):\n current_user = request.user\n selected_cat = get_object_or_404(Category, pk=pk)\n selected_items = ItemIn.objects.all().filter(item_category=selected_cat).values_list(\'item_name\', flat=True).distinct()\n all_cats = Category.objects.all()\n cat_count = all_cats.count()\n item_count = ItemIn.objects.values_list(\'item_name\', flat=True).distinct().count() # returns a list of tuples..\n #all_units = Item.objects.aggregate(Sum(\'item_quantity\'))[\'item_quantity__sum\']\n context = {\n #\'all_units\': all_units,\n \'item_count\': item_count,\n \'cat_count\': cat_count,\n \'selected_items\': selected_items,\n \'selected_cat\': selected_cat,\n \'current_user\': current_user,\n }\n\n return render(request, \'townoftech_warehouse/cat_details.html\', context)\nRun Code Online (Sandbox Code Playgroud)\n\n调用的变量selected_items就是问题所在!
这是我如何使用这个视图函数
\n\n超文本标记语言
\n\n{% extends \'townoftech_warehouse/base.html\' %}\n {% block content %}\n{% load static %}\n <div class="card">\n <div class="card-header">\n \xd8\xa7\xd9\x84\xd8\xa7\xd8\xb5\xd9\x86\xd8\xa7\xd9\x81 \xd9\x81\xd9\x89 \xd8\xa7\xd9\x84\xd9\x85\xd8\xae\xd8\xb2\xd9\x86\n </div>\n <div class="card-body">\n <h3 align="right"> {{ selected_cat }}</h3>\n <footer><a href="{% url \'edit_cat\' selected_cat.pk%}"><button type="button" class="btn btn-dark">\xd8\xaa\xd8\xb9\xd8\xaf\xd9\x8a\xd9\x84 \xd8\xa5\xd8\xb3\xd9\x85 \xd8\xa7\xd9\x84\xd9\x81\xd8\xa6\xd8\xa9</button></a>\n <a href="{% url \'category_delete\' selected_cat.pk%}"><button type="button" class="btn btn-dark">\xd9\x85\xd8\xb3\xd8\xad \xd8\xa7\xd9\x84\xd9\x81\xd8\xa6\xd8\xa9</button></a>\n</footer>\n </div>\n</div>\n <div style="overflow: auto;height: 280px">\n\n <table class="table table-bordered">\n\n <tbody>\n {% for item in selected_items %}\n <tr align="right">\n <th scope="row"><a href = "{% url \'items\' item.pk%}">{{ item.item_name }}</a></th>\n </tr>\n {% endfor %}\n </tbody>\n</table>\n </div>\n <br>\n <br>\n<div align="right"><a href="{% url \'cat\' %}"><button type="button" class="btn btn-danger">\xd8\xb1\xd8\xac\xd9\x88\xd8\xb9</button></a></div>\n\n{% endblock %}\nRun Code Online (Sandbox Code Playgroud)\n\n每当我尝试打开此页面时,我收到的错误是:
\n\n错误
\n\nNoReverseMatch at /category/15/\nReverse for \'items\' with arguments \'(\'\',)\' not found. 1 pattern(s) tried: [\'item\\\\/(?P<pk>[0-9]+)\\\\/$\']\nRun Code Online (Sandbox Code Playgroud)\n\n更新
\n\n我已从 HTML 文件中删除了链接
\n\n改变了
\n\n{% for selected_items % 中的项目}\n \n {{ item.item_name }}\n \n {% endfor %}
\n\n像是
\n\n {% for item in selected_items %}\n <tr align="right">\n <th scope="row">{{ item.item_name }}</th>\n </tr>\n {% endfor %}\nRun Code Online (Sandbox Code Playgroud)\n\n错误消失了,但它现在给了我一个空值列表!
\nnev*_*ner 12
selected_items变量包含字符串对象列表(项目名称)。字符串没有pk属性,因此item.pk在模板中不返回任何内容。
相反,values_list您需要传递到对象模板列表。如果您使用的是 postgres,则可以使用distinct()with 参数。
selected_items = ItemIn.objects.all().filter(item_category=selected_cat).distinct('item_name')
Run Code Online (Sandbox Code Playgroud)
否则你可以尝试values使用'item_name', 'pk':
selected_items = ItemIn.objects.all().filter(item_category=selected_cat).values('item_name', 'pk').distinct()
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
26029 次 |
| 最近记录: |