我已经尝试太长时间了,以使我的网址能够与我的简单模型和视图一起使用。我绝对不了解某些事情。
我希望创建一个类似于以下内容的网址:
.../department/team
,
在这里我不使用部门对象的PK,而是使用名称。
我的模型如下:
class Department(models.Model):
name = models.CharField(max_length=50, blank=True, null=True)
def __str__(self):
return 'Department: ' + self.name
class Hold(models.Model):
name = models.CharField(max_length=50, blank=True, null=True)
department = models.ForeignKey(Department, on_delete=models.CASCADE)
我的视图看起来像(更新):
class IndexView(generic.ListView):
template_name = 'index.html'
context_object_name = 'departments_list'
def get_queryset(self):
return Department.objects.all()
class DepartmentView(generic.DetailView):
model = Department
template_name="depdetail.html"
slug_field = "name"
slug_url_kwarg = "name"
我的网址如下:更新
urlpatterns = [
path('', views.IndexView.as_view(), name='index'),
path('<name>', views.DepartmentView.as_view(), name='depdetail')
]
最后是我的html:
<h1> Hello there {{ object.name }} student</h1> </br>
<b> Choose your team:<b> </br>
但是我不断收到page not found
或must be slug or pk
。
我希望有人可以帮助我,以便我可以解决这个问题。
已更新 现在可以使用了:)感谢您的答复。
答案 0 :(得分:2)
默认情况下,当您使用pk
时,Django将查找slug
或DetailView
字段。您必须重写get_object()
方法才能更改此行为:
get_object()
在视图的参数中寻找一个pk_url_kwarg
参数;如果找到此参数,则此方法使用该值执行基于主键的查找。如果未找到此参数,它将寻找一个slug_url_kwarg
参数,并使用slug_field
执行一个a查找。
话虽如此,您的方法还有其他问题。出于其他原因,最好使用a来代替名称。例如,name
不能保证是唯一的,并且它可能包含不安全的字符。有关如何使用子域的详细讨论,请参见this question。