Answer the question
In order to leave comments, you need to log in
How to display a DetailView in Django?
Please help to display the page with the model object.
The model is described as
class Patient(models.Model):
# uuid = ShortUUIDField()
firstname = models.CharField(max_length=100, verbose_name="Имя", blank=False, null=True)
lastname = models.CharField(max_length=300, verbose_name="Фамилия", blank=False, null=True)
upload_path = 'patient/'
photo = models.ImageField(upload_to=upload_path, verbose_name="Фото профиля", null=True)
MAN = 'M'
FEMALE = 'F'
GENDER_CHOICES = (
(MAN, 'Мужской'),
(FEMALE, 'Женский'),
)
gender = models.CharField(max_length=1, choices=GENDER_CHOICES, default=MAN, verbose_name="Пол",)
midle_name = models.CharField(max_length=300, verbose_name="Отчетство", blank=True, null=True)
birthday = models.DateField(verbose_name="Дата рождения")
phone = models.CharField(max_length=20, verbose_name="Номер телефона")
email = models.EmailField(max_length=200, verbose_name="Электронный адрес")
class Meta:
verbose_name = 'Пациент'
verbose_name_plural = 'Пациенты'
def __str__(self):
return "%s %s" % (self.firstname, self.lastname)
class PatientDetailView(DetailView):
model = Patient
queryset = Patient.objects.filter(id=1)
def get_context_data(self, **kwargs):
context = super(PatientDetailView, self).get_context_data(**kwargs)
context['patient'] = Patient.objects.get(id=id)
return context
url(r'^(?P<id>[0-9]+)/$', views.PatientDetailView.as_view(), name='patient_detail'),
Answer the question
In order to leave comments, you need to log in
What does no pk mean, this is id.
You just need to change the attribute of the view class pk_url_kwarg = 'id'
, or change the pattern in urls.pyr'^(?P<pk>[0-9]+)/$'
to instead of r'^(?P<id>[0-9]+)/$'
Example:
class PatientDetailView(DetailView):
model = Patient
pk_url_kwarg = 'id'
Delete it. You don't need to write ID yourself. Look at the DetailView source
queryset = Patient.objects.filter(id=1)
def get_context_data(self, **kwargs):
context = super(PatientDetailView, self).get_context_data(**kwargs)
context['patient'] = Patient.objects.get(id=id)
return context
You screwed up something very difficult ...
In addition to describing the model, you need to write something like this in urls.py:
from .views import PatientDetailView
...
url(r'patient/(?P<pk>\d+)/', PatientDetailView.as_view(), name='patient_detail'),
...
from django.views.generic import DetailView
from models import Patient
class PatientDetailView(DetailView):
model = Patient
from django.views.generic import DetailView
from .models import Patient
urlpatterns = [
...
url(r'patient/(?P<pk>\d+)/', DetailView.as_view(model=Patient), name='patient_detail'),
]
I will add, if you need to get an object in some tricky way, then it's better to use get_object
Didn't find what you were looking for?
Ask your questionAsk a Question
731 491 924 answers to any question