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 в вашем шаблоне)

Вернуться на верх