Django 如何在myListView中定义另一个模型的slug
我需要帮助理解我自己的代码,特别是views.py。我正在尝试更改TitleUpdateListView的url模式,从使用我的更新模型标题字段改为使用slug字段 如果有人能逐行解释我的TitleUpdateListView中的内容,这样我就能更好地理解具体的内容,那就太好了 url.pyDjango 如何在myListView中定义另一个模型的slug,django,Django,我需要帮助理解我自己的代码,特别是views.py。我正在尝试更改TitleUpdateListView的url模式,从使用我的更新模型标题字段改为使用slug字段 如果有人能逐行解释我的TitleUpdateListView中的内容,这样我就能更好地理解具体的内容,那就太好了 url.py urlpatterns = [ # Update view for each game path('<str:title>/updates/', TitleUpdateListV
urlpatterns = [
# Update view for each game
path('<str:title>/updates/', TitleUpdateListView.as_view(), name='title-updates'),
# Adds the ability to sort by platform
path('<str:title>/updates/<int:platform_id>/', TitleUpdateAjaxListView.as_view(), name='title-updates-ajax'),
]
不确定您所说的“我正在尝试更改TitleUpdateListView的url模式,从使用我的更新模型标题字段改为使用slug字段”是什么意思。在url.py中,您可以将参数的名称(在
中的xxxx)更改为您想要的任何名称,只要您还在视图中查找相同的名称。您可以将其更改为
,在视图中,您可以像self.kwargs.get('slug')
一样获取它。只需记住还要更改用于过滤游戏
表的参数(slug
而不是title
)
至于解释您的视图的作用,您可能应该看看Django关于基于类的视图的文档,但我将尝试给出一个概述:
get\u queryset
方法正在搜索Game
表,以查找其标题与URL参数中传递的标题匹配的游戏。然后返回所有Update
对象的列表,这些对象的game
字段指向刚刚找到的游戏
get\u context\u data
方法将在get\u queryset
方法中找到的相同的Game
对象添加到'Game'
键下的视图上下文中。这意味着您可以访问此视图呈现的模板内的游戏
对象。不确定您所说的“我正在尝试更改我的TitleUpdateList视图的url模式,而不是使用我的更新模型标题字段,而是使用slug字段。”。在url.py中,您可以将参数的名称(在
中的xxxx)更改为您想要的任何名称,只要您还在视图中查找相同的名称。您可以将其更改为
,在视图中,您可以像self.kwargs.get('slug')
一样获取它。只需记住还要更改用于过滤游戏
表的参数(slug
而不是title
)
至于解释您的视图的作用,您可能应该看看Django关于基于类的视图的文档,但我将尝试给出一个概述:
get\u queryset
方法正在搜索Game
表,以查找其标题与URL参数中传递的标题匹配的游戏。然后返回所有Update
对象的列表,这些对象的game
字段指向刚刚找到的游戏
get\u context\u data
方法将在get\u queryset
方法中找到的相同的Game
对象添加到'Game'
键下的视图上下文中。这意味着您可以访问此视图呈现的模板内的Game
对象。您只需更改视图的get\u queryset
方法:
# change url variable name from title to slug
path('<str:slug>/updates/', TitleUpdateListView.as_view(), name='title-updates'),
这同样适用于get\u context\u data
:
def get_context_data(self, **kwargs):
context = super(TitleUpdateListView, self).get_context_data(**kwargs)
context['game'] = get_object_or_404(Game, slug=self.kwargs.get('slug'))
return context
您只需更改视图的
get\u queryset
方法:
# change url variable name from title to slug
path('<str:slug>/updates/', TitleUpdateListView.as_view(), name='title-updates'),
这同样适用于get\u context\u data
:
def get_context_data(self, **kwargs):
context = super(TitleUpdateListView, self).get_context_data(**kwargs)
context['game'] = get_object_or_404(Game, slug=self.kwargs.get('slug'))
return context
从您的问题中,可以假设您实际上想要了解代码中发生了什么,但从选定的答案来看,您似乎只是想要正确的代码。这没问题,但以后要从一开始就直截了当,这样你就能更快地得到答案,没有人浪费时间写你实际上不想写的东西。这是我的错,对不起。我刚刚意识到你不能标记多个正确答案。我最初标记了您的用户,然后标记了其他用户。从您的问题中,人们会认为您实际上想了解代码中发生了什么,但从所选的答案来看,您似乎只需要正确的代码。这没问题,但以后要从一开始就直截了当,这样你就能更快地得到答案,没有人浪费时间写你实际上不想写的东西。这是我的错,对不起。我刚刚意识到你不能标记多个正确答案。我最初标记了您的用户,然后标记了其他用户。