django如何在url中重命名PK字段

时间:2018-04-15 13:47:16

标签: django django-views

如果有人可以帮助我在urlpattern中使用它时如何为类(表)重命名pk。 (我的目标是在同一个url中使用很多类(表)PK,我想知道如何为每个表重命名PK字段) 为简单起见,下面的代码仅适用于一个类(表):

models.py:

class School(models.Model):
    name = models.CharField(max_length=256)
    principal = models.CharField(max_length=256)
    location = models.CharField(max_length=256)
    def __str__(self):
        return str(self.name)
    def get_absolute_url(self):
        return reverse("basic_app:school_detail",kwargs={'pk':self.pk})

views.py:

class SchoolListView(ListView):
    model = models.School


class SchoolDetailView(DetailView):
    context_object_name = 'school_details'
    model = models.School
    template_name = 'basic_app/school_detail.html'

和我目前的urls.py(我想编辑):

urlpatterns = [
url(r'^$',views.SchoolListView.as_view(),name='school_list'),
url(r'^(?P<pk>\d+)/$',views.SchoolDetailView.as_view(),name='school_detail'),]

所以我的目标是让urls.py文件看起来像这样(school_pk而不是pk):

urlpatterns = [
url(r'^$',views.SchoolListView.as_view(),name='school_list'),
url(r'^(?P<school_pk>\d+)/$',views.SchoolDetailView.as_view(),name='school_detail'),]

我知道我应该在views.py中的类SchoolDetailView下面添加一个函数,但我不知道怎么做? 我还在学习,所以任何帮助都将受到高度赞赏。谢谢你提前

1 个答案:

答案 0 :(得分:0)

在声明模型时,您可以通过添加primary_key=True来创建一个主要字段,例如

class School(models.Model):
    name = models.CharField(max_length=256, primary_key=True)

然后,您可以在网址中使用name

我建议使用独特的slug字段。

修改

如果URL被称为pk或slug或名称,则该网址并不感兴趣。它对模式感兴趣。如果您有网址格式

url(r'^(?P<slug>[\w\\-]+)/$', views.Type1View.as_view(), name="slug"),
url(r'^(?P<city>[\w\\-]+)/$', views.Type2View.as_view(), name="city"),

{%url&#39; slug&#39; slug%}和{%url&#39; city&#39; slug%}将生成一个URL或/slug/,两者都将调用Type1View.as_view()

您需要确保您的网址是唯一的。

如果你想引用3个表格,那么你的网址格式是

url(r'^(?P<slug>[\w\\-]+)/(?P<slug1>[\w\\-]+)/(?P<slug2>[\w\\-]+)/$', MyView.as_view(), name="someName"),

然后在您的视图中定义def get_objects(self)def get_queryset(self)以获取您想要的信息。