Как показать представление списка в моих URL, основанных на строке, а не целое число в django - PullRequest
0 голосов
/ 09 апреля 2020

это моя модель, где у меня есть класс людей, где каждый человек в этом классе людей живет в зоне, это мой класс людей и класс зоны

class Zones(models.Model):
    zone_name = models.CharField(max_length=120)
    def __str__(self):
        return self.zone_name

class People(models.Model):
    first_name = models.CharField(max_length=120)
    last_name = models.CharField(max_length=120)
    address = models.TextField()
    phone_number = models.CharField(max_length=12)
    national_number = models.CharField(max_length=14)
    no_of_members = models.PositiveIntegerField(null=False, blank=False)
    zone = models.ForeignKey(Zones, null=False, blank=False, on_delete=models.CASCADE)

    def __str__(self):
        return self.first_name

и как я хочу показать им в маршрут / зона будет списком моих зон, и когда пользователь нажмет на любую из этих зон, я хочу, чтобы он увидел список людей, которые находятся в этой зоне

вот мои представления

class PeopleView(ListView):
    model = People
    template_name = "people.html"
    context_object_name = 'people_list'


class ZoneView(ListView):
    model = Zones
    template_name = "zones.html"
    context_object_name = 'zones_list'

class PeopleDetailView(DetailView):
    model = People
    template_name = "people_detail.html"

и вот мои URL

urlpatterns = [
    path('admin/', admin.site.urls),
    path('people/', PeopleView.as_view(), name='people'),
    path('zone/', ZoneView.as_view(), name='zone'),
    path('zone/<int:pk>/', PeopleDetailView.as_view(), name='detail'),
]

, а вот мой html шаблон для зоны

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title>Zones List</title>
</head>
<body>
    <h1>Zones List</h1>
    <ul>
        {% for zone in zones_list %}
            <a href="#"><li>{{ zone }}</li></a>
        {% endfor %}
    </ul>
</body>
</html>

1 Ответ

0 голосов
/ 09 апреля 2020

Обновите ваш URL-путь до

...
 path('zone/<str:zone_name>/', PeopleView.as_view(), name='detail'),
...

И обновите свой PeopleView следующим:

class PeopleView(ListView):
    model = People
    template_name = "people.html"
    context_object_name = 'people_list'

    def get_queryset(self, *args, **kwargs):
        if 'zone_name' in self.kwargs:
            return  People.objects.filter(zone__zone_name=self.kwargs ['zone_name'])
        return super().get_queryset(*args, **kwargs)

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