如何在django中基于字符串而非整数在我的url中显示列表视图



这是我的模型,我有人员类,这个人员类中的每个人都住在一个区域中,这是我人员类和区域类

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"

这是我的网址

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>

更新的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)

最新更新