【问题标题】:Using the object in DetailView在 DetailView 中使用对象
【发布时间】:2021-04-15 19:05:17
【问题描述】:

假设我有一个名为 City 的模型,它有一个 name 属性。在我的 DetailView 中,我想使用被点击的特定城市的名称来发出一些 api 请求,然后将其发送到 detailview.html。

有没有办法访问它?

【问题讨论】:

  • 如果城市名称是唯一的,是的。

标签: python django crud django-class-based-views detailview


【解决方案1】:

如果Cityname唯一的,是的。例如,您可以创建一个 URL:

from django.urls import path
from app_name.views import CityDetailView

urlpatterns = [
    path('city/<str:name>/', CityDetailView.as_view(), name='city-detail'),
]

然后你可以发DetailView:

from django.shortcuts import get_object_or_404
from django.views.generic.detail import DetailView
from app_name.models import City

class CityDetailView(DetailView):
    model = City
    template_name = 'name_of_template.html'

    def get_object(self, *args, **kwargs):
        return get_object_or_404(City, name=self.kwargs['name'])

在模板中,例如列出城市的模板,然后您可以生成 URL:

&lt;a href="<b>{% url 'city-detail' 'Bucharest' %}"</b>&gt;Bucharest&lt;/a&gt;

然而,通常使用名称,而是使用slug [Django-doc]。蛞蝓通常在视觉上更令人愉悦,因为它避免了百分比编码数据。通常,您还会在 slug 字段上添加数据库索引。此外,DetailView 会查看 url 是否有名为 slug 的参数,然后会自动尝试过滤模型中名为 slug 的字段。

【讨论】:

  • 城市的名称仅对每个用户是唯一的,而不是对整个数据库,但我使它与此一起使用:city=get_object_or_404(Location, name=self.kwargs['name'] ,user=self.request.user) 非常感谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-12-02
  • 2018-05-31
  • 2021-04-24
  • 1970-01-01
  • 1970-01-01
  • 2020-09-15
  • 2016-06-10
相关资源
最近更新 更多