Подсчет количества экземпляров объекта City в синтаксисе модели - PullRequest
2 голосов
/ 24 марта 2019

Я кратко объясню, что я пытаюсь сделать.

Пользователь зарегистрируется с помощью email, first and last name, а затем выберет city (обрабатывается моделью под названием Waitlist).

Я использую django_cities_light для выбора города.

Я хочу определить queryset, который подсчитывает количество раз, когда был выбран конкретный город, а затем выводит это число наМоя страница template_name.

Пример) 3 пользователя регистрируются, 2 человека выбирают London в качестве своего города, таким образом, в моей модели Waitlist есть 2 экземпляра объекта London city.Я хочу, чтобы это было легко сделать для нескольких городов.

Я хочу затем вывести это 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)

1 Ответ

1 голос
/ 24 марта 2019

может быть, вам нужно что-то подобное, собрать все города и подготовить данные:

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>

подробности о запросе вы можете прочитать iexact , отчетливый

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...