Создается список словесных имен полей для перебора в шаблоне Django, но ничего не отрисовывается
Я создаю страницу профиля для веб-приложения. Я отображаю профиль пользователя, который является экземпляром моей модели профиля, подобранной на основе Users pk. В html я хочу, чтобы это отображалось следующим образом:
verbose_field_name: field_value
Или, например:
First Name: John
Surname: Lewis
Я сделал так, что он отображал фактическое имя поля, например:
first_name: John
surname: Lewis
Что сработало, однако, как только я попытался добавить и перебрать имена полей, это не сработало.
Моя модель:
class Profile(models.Model): # Get access to create profile by default
MALE = 'M'
FEMALE = 'F'
OTHER = 'O'
UNSPECIFIED = "U"
GENDER_CHOICES = [
(MALE, 'Male'),
(FEMALE, 'Female'),
(OTHER, 'Other'),
(UNSPECIFIED, 'Prefer not to say'),
]
user = models.OneToOneField(User, on_delete=models.CASCADE)
phone_number = models.CharField(verbose_name='Mobile Phone Number', max_length=20)
bio = models.TextField(verbose_name='Bio', max_length=500, blank=True, null=True)
# profile_image = models.ImageField(blank=True, null=True)
date_of_birth = models.DateField(verbose_name='Date of Birth', blank=True, null=True)
first_name = models.CharField(verbose_name='First Name', max_length=255, blank=True, null=True)
surname = models.CharField(verbose_name='Surname', max_length=255, blank=True, null=True)
gender = models.CharField(verbose_name='Gender', max_length=255, choices=GENDER_CHOICES, blank=True, null=True)
emergency_contact_name = models.CharField(verbose_name='Emergency Contact Name', max_length=255, blank=True, null=True)
emergency_contact_number = models.CharField(verbose_name='Emergency Contact Number', max_length=20, blank=True, null=True)
business = models.ForeignKey(BusinessProfile, null=True, blank=True, on_delete=models.SET_NULL) # This may need to change.
creation_date = models.DateTimeField(auto_now_add=True)
def __str__(self):
return str(self.user)
Мое мнение:
class ShowProfileView(DetailView):
model = Profile
template_name = 'profiles/user_profile.html'
def get_context_data(self, *args, **kwargs):
context = super(ShowProfileView, self).get_context_data(*args, **kwargs) # super gives access to parent class methods
user_profile = get_object_or_404(Profile, id=self.kwargs['pk'])
context["user_profile"] = user_profile
return context
def get_object(self, *args, **kwargs):
obj = Profile.objects.filter(id=self.kwargs['pk']).values('first_name', 'surname', 'date_of_birth', 'phone_number', 'bio', 'gender', 'emergency_contact_name', 'emergency_contact_number') # list of dictionaries
object = obj[0]
return object
def get_verbose_field_names(self):
verbose_field_names = [
Profile._meta.get_field('first_name').verbose_name,
Profile._meta.get_field('surname').verbose_name,
Profile._meta.get_field('date_of_birth').verbose_name,
Profile._meta.get_field('phone_number').verbose_name,
Profile._meta.get_field('bio').verbose_name,
Profile._meta.get_field('gender').verbose_name,
Profile._meta.get_field('emergency_contact_name').verbose_name,
Profile._meta.get_field('emergency_contact_number').verbose_name,
]
return verbose_field_names
Мой шаблон:
{% extends "base.html" %}
{% block content %}
<h1>Profile</h1>
<br/><br/>
{% csrf_token %}
<ul>
{% for v in object.values %}
{% for field in verbose_field_names %}
<p>{{ field }}: {{ v }} </p>
{% endfor %}
{% endfor %}
</ul>
<a href='{% url "profiles:edit_profile" pk=user.profile.id %}'>Edit Profile</a>
{% endblock %}
Я действительно просто не могу понять, почему он не отображается с добавлением нового метода "get_verbose_fields_name()".