首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >请问怎样才能得到一个类别中的列表数量,我已经尝试过了。

请问怎样才能得到一个类别中的列表数量,我已经尝试过了。
EN

Stack Overflow用户
提问于 2021-07-13 15:23:24
回答 2查看 66关注 0票数 1

我有一个django应用程序,我需要计算一个类别中的列表数量(如下面的模型所定义):

这里是我的完整模型

代码语言:javascript
复制
class Category(models.Model):
    name = models.CharField(max_length=500)
    icon = models.ImageField(upload_to='photos/icons/%Y/%m/%d/')

    def __str__ (self):
        return self.name
     
class Listing(models.Model):

    name = models.CharField(max_length=300)
    category = models.ForeignKey(Category, on_delete=models.CASCADE, default=False, null=True)
    email = models.EmailField(max_length=300)
    description = RichTextField(blank=False, null=False)
    photo_main = models.ImageField(upload_to = 'photos/%Y/%m/%d/')
    photo_1 = models.ImageField(upload_to = 'photos/%Y/%m/%d/', blank=True, default=True)
    photo_2 = models.ImageField(upload_to = 'photos/%Y/%m/%d/', blank=True, default=True)
    photo_3 = models.ImageField(upload_to = 'photos/%Y/%m/%d/', blank=True, default=True)
    photo_4 = models.ImageField(upload_to = 'photos/%Y/%m/%d/', blank=True, default=True)
    location = models.CharField(max_length=500, null=True)
    phone_number =  models.CharField(max_length=11, default = "#")

    website =  models.CharField(max_length=150, blank=True, default="#")
    facebook =  models.CharField(max_length=150, blank=True, default="#")
    instagram =  models.CharField(max_length=150, blank=True, default="#")
    opening_time =  models.CharField(max_length=7)
    closing_time =  models.CharField(max_length=7)
    is_published = models.BooleanField(default=False)
    posted_date = models.DateTimeField(auto_now_add=True)
    user_id = models.IntegerField(blank=True)


    def __str__ (self):
        return self.name

这里是我的观点

代码语言:javascript
复制
from django.shortcuts import render

from listings.models import Listing
from listings.models import Category
from testimonies.models import Testimony
from our_team.models import Team_Mate
from testimonies.models import Testimony
from django.db.models import Count


def index(request):

这部分工作得很好。

代码语言:javascript
复制
    listings = Listing.objects.order_by('-posted_date').filter(is_published=True)[:6]
    category = request.GET.get('category')
    categories = Category.objects.all()[:7]

计数类别中的列表

代码语言:javascript
复制
    count_cate = Category.objects.all()
    cate_count = count_cate.count()




if category == None:
    listings = Listing.objects.order_by('-posted_date').filter(is_published=True)[:6]

else:
    listings = Listing.objects.filter(Category__name=category)

这里是我的上下文

代码语言:javascript
复制
context ={
    'listings': listings,
    'categories': categories,
    'cate_count': cate_count,
    }

return render(request, 'pages/index.html', context)

这里是我的html,我希望类别中的列表数显示

代码语言:javascript
复制
{% extends 'base.html' %}
{% load static %}

{% block content %}

<!-- ======= Intro Section ======= -->
<div class="header">
<div class="header-content display-table">
<div class="table-cell">
  <div class="container">
    <h1 class="header-title text-light text-uppercase pb-3">Explore Bonny Island</h1>
    <h3 class="text-light">Find. Connect. Share</h3>
    <div class="search mt-3 px-0 py-1 mx-0">
      <form action="{% url 'search' %}" method="GET">
        {% csrf_token %}
        <div class="row d-flex justify-content-center container p-0 m-0 px-1">
          <input type="text" name="keywords"
            class="form-control col-lg-3 col-md-12 col-sm-12 mx-2   py-4 my-2 border border-5"
            placeholder=" Keyword">
          <input type="text" name="location"
            class="form-control col-lg-3 col-md-12 mx-2   py-4 col-sm-12 my-2 border border-5"
            placeholder=" Location">
          <input type="text" name="category" value="{{ query }}" list="category"
            class="form-control col-lg-3 col-md-12 col-sm-12 mx-2  py-4 my-2 border border-5" 
placeholder=" Category (All)">
          <datalist id="category">
            {% for categories in categories %}
            <option>{{ categories.name }}</option>
            {% endfor %}
          </datalist>
          <button type="submit"
            class="btn search-bt col-lg-2 col-md-12 mx-2 col-sm-12 py-2 px-2 font-weight-bold my- 
2">Search</button>
        </div>
      </form>
    </div>
  </div>
</div>
</div>
</div><!-- End Intro Section -->



<!-- ======== most popular categories ========= -->
<section class="main">
<div class="discover pb-1 m-0">
<h2>Explore Categories</h2>
<div class="container">
  <div class="row justify-content-around m-0 p-0 pt-3">
    {% for category in categories %}
    {% if category %}
    <div class="col-lg-3 col-md-6 py-2">
      <a href="{% url 'listings' %}?category={{ category.name }}" class="card category">
        <div class="d-flex justify-content-between align-items-start px-3 m-0 py-2">
          <div class="category-name-icon p-0 m-0">
            <span class="text-dark font-weight-bold"><img class="category-icon" src="{{ 
category.icon.url }}">
              {{category.name}}</span>
          </div>
            <div class="category-list-number text-muted font-weight-bold">{{cate_count}}</div>
        </div>
      </a>
    </div>
    {% endif %}
    {% endfor %}
    <div class="col-lg-3 col-md-6 py-2">
      <a href="{% url 'category' %}" class="card category" data-bs-toggle="collapse" 
        href="#collapseExample"
        role="button" aria-expanded="false" aria-controls="collapseExample">
        <div class="d-flex justify-content-between = px-3 m-0 py-2">
          <i class="font-weight-bold py-1 text-secondary">More Categories...</i>
        </div>
      </a>
    </div>

  </div>
</div>
</section> <!-- ======== most popular categories end ======== -->

<!--       STRUCTURING THE POPULAR LISTINGS CONTENT-->
    <section id="popularListings" class="container mb-5 py-5">
        <!--            Popular listenings head title-->
        <div class="sectionTitle  d-flex justify-content-between align-items-baseline">
            <div class="mainTitleContents">
                <h2 class="titleText h2 text-blue">Popular Listings</h2>
                <p class="subTitleText mb-2">Explore businesses on the island.</p>
            </div>
            <div class="filterOption">
                <a href="{% url 'listings' %}"  class="btn btn-sm bg-blue">All Listings</a>
            </div>
        </div>
        <!--           MAIN POPULAR LISTINGS ROW CONTENT-->
        <div class="popularListingsRows row py-2">
            {% if listings %}
            {% for listing in listings %}
            <div class="customCard p-1 m-0 col-lg-3 col-md-4 col-sm-6 mt-sm-3">
                <div class="card">
                    <div class="card-header p-0">
                        <div class="blank rounded" style="background-image: url('{{ 
                         listing.photo_main.url }}'); background-repeat: no-repeat;
                          background-size:cover; width:100%; height: 15em; background- 
                          position:center-top" ;></div>
                    </div>
                    <div class="card-body">
                        <div class="content-details">
                            <h3 class="m-0 mt-1 mb-2 cardTitle">{{ listing.name }}</h3>
                            <p class="cardSubTitle">
                              {%autoescape off%}
                                {{ listing.description|striptags|truncatechars:100 }}
                              {%endautoescape%}
                            </p>
                            <a href="{% url 'listing' listing.id %}" class="btn btn-sm bg-blue text- 
light rounded-none">Read More</a>
                        </div>
                    </div>

                </div>
            </div>

        {% endfor %}
        {% else %}
      <div class="col-md-12">
        <p class="text-dark">No listings Available</p>
      </div>
      {% endif %}
    </div>

    </section>
{% endblock %}

如何使这些代码按预期工作?

EN

回答 2

Stack Overflow用户

发布于 2021-07-13 15:33:06

您应该调用对象列表上的计数方法,如.

代码语言:javascript
复制
if category == None:
    listings = Listing.objects.order_by('-posted_date').filter(is_published=True)[:6]

else:
    listings = Listing.objects.filter(category__name=category).count()

请确保您有Category__name=category,您必须允许它与您的模型字段category匹配。

在你的html

代码语言:javascript
复制
<!-- ======= Intro Section ======= -->
<form action="{% url 'search' %}" method="GET">
    {% csrf_token %}  
    <div class="row d-flex justify-content-center container p-0 m-0 px-1">
        ...
        <!--<input type="text" name="category" value="{{ query }}" list="category" class="form-control col-lg-3 col-md-12 col-sm-12 mx-2  py-4 my-2 border border-5" placeholder=" Category (All)">-->

        <!-- Remove value="{{ query }}" -->
        <input type="text" name="category" list="categories" class="form-control col-lg-3 col-md-12 col-sm-12 mx-2  py-4 my-2 border border-5" placeholder=" Category (All)">

        <!-- Should be category in categories instead of categories in categories -->
        <datalist id="categories">
            {% for category in categories %}
                <option value="{{ category.name }}"> <!-- Setting the value here... -->
            {% endfor %}
        </datalist>
        ...
    </div>       
</form>
票数 0
EN

Stack Overflow用户

发布于 2021-07-14 14:54:03

我通过调用我想要计数的类别的名称来解决这个问题,但是我仍然需要寻找一种不指定类别名称来计算它的方法。

代码语言:javascript
复制
cate_count = Listing.objects.filter(category__name="Catering services").count()
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68365240

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档