我将简要解释我要做什么。

用户将使用emailfirst and last name进行注册,然后选择一个city(由称为Waitlist的模型处理)。

我正在使用django_cities_light进行城市选择。

我想定义一个queryset来计算选择特定城市的次数,然后将该数字输出到我的template_name页面上。

例如)3个用户注册,2个用户选择London作为他们的城市,因此在我的London模型中有2个Waitlist城市对象的实例。我希望能够轻松地在多个城市做到这一点。

我想例如使用2渲染此{{ for London in waitlist.qs }}(我不确定语法,因此不知道为什么问)。

我将展示到目前为止的工作,如果有人可以向我解释如何正确定义查询集,我将不胜感激!

views.py

class HomeView(TemplateView):
    template_name = 'home/home.html'
    def get(self, request, *args, **kwargs):
        london = Waitlist.objects.get(??)
        context = {
            'london': london,
        }
        return render(request, self.template_name, context)


models.py

class Waitlist(models.Model):
    first_name            = models.CharField(max_length=30, null=True)
    last_name = models.CharField(max_length=30, null=True)
    email = models.CharField(max_length=40, null=True)
    city            = models.ForeignKey(City, null=True, blank=True, on_delete=models.CASCADE)

最佳答案

可能您需要这样的东西,获取所有城市并准备数据:

class HomeView(TemplateView):
    template_name = 'home/home.html'

    def get(self, request, *args, **kwargs):
        query = Waitlist.objects.all()
        data = {}
        for cname in query.values('city__name').distinct():
            city = cname['city__name']
            data[city] = query.filter(city__name=city)
        context = {
            'data': data,
        }
        return render(request, self.template_name, context)


并在模板中

{% for city, details in data.items %}
    <strong>{{ city }}, total - {{ details|length }}:<strong>
    <ul>
    {% for wait_item in details %}
        <li>{{ wait_item.first_name }} - {{ wait_item.email }}</li>
    {% endfor %}
    </ul>
<hr>
{% endfor %}


如果只需要London
认为应该是:

class HomeView(TemplateView):
    template_name = 'home/home.html'

    def get(self, request, *args, **kwargs):
        data = Waitlist.objects.filter(city__name__iexact='london')
         context = {
            'data': data,
        }
        return render(request, self.template_name, context)


并在模板中:

    <strong>London, total - {{ data|length }}:<strong>
    <ul>
    {% for wait_item in data %}
        <li>{{ wait_item.first_name }} - {{ wait_item.email }}</li>
    {% endfor %}
    </ul>


您可以阅读iexactdistinct的查询的详细信息

关于python - 计算模型语法中City对象的实例数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/55326302/

10-12 18:43