如果有人可以帮助我在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下面添加一个函数,但我不知道怎么做? 我还在学习,所以任何帮助都将受到高度赞赏。谢谢你提前
答案 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)
以获取您想要的信息。