Django: Как я могу получить 'pk' в views.py при использовании представлений на основе классов?
Я создаю приложение с представлениями на основе классов. Мне нужно получить 'pk' в моем файле views.py, когда я загружаю страницу, используя общий DetailView.
Мой файл urls.py:
from django.urls import path
from . views import HomeView, ProfileView, AddPetView, EditPetView, DeletePetView,
PetProfileView
urlpatterns = [
...
path('profile/pet/<int:pk>', PetProfileView.as_view(), name='pet_profile'),
path('', HomeView.as_view(), name='home'),
]
Мой файл views.py:
from django.shortcuts import render
from django.views.generic import TemplateView, ListView, UpdateView, CreateView, DeleteView,
DetailView
from django.urls import reverse_lazy
from . models import Pet
class PetProfileView(DetailView):
model = Pet
template_name = 'pet_profile.html'
#key = Pet.objects.values_list('birth_date').get(pk=1)
Мне нужно извлечь из базы данных столбец birh_date для конкретного питомца. Как получить этот пк=? когда я загружаю страницу pet_profile?
Я не уверен, что могу хорошо описать этот случай. Если что-то непонятно, спросите меня. Я постараюсь объяснить еще раз.
Заранее спасибо,
О представлениях на основе классов:
self.kwargs['pk']
Итак, в вашем случае
class PetProfileView(DetailView):
model = Pet
template_name = 'pet_profile.html'
def get_key(self):
Pet.objects.values_list('birth_date').get(pk=self.kwargs['pk'])
Вы можете получить доступ к своему ключу внутри класса с помощью этой функции:
key = self.get_key()
Как уже упоминалось, вы можете получить доступ к параметрам URL, как self.kwargs["pk"]
. Но поскольку вы уже используете DetailView
, который уже предоставляет функциональность для получения объекта по его id, вы можете настроить используемый им queryset:
class PetProfileView(DetailView):
model = Pet
template_name = 'pet_profile.html'
queryset = Pet.objects.values_list('birth_date')
(хотя и без этого вы должны иметь доступ к pet.birth_date
в вашем шаблоне)