Django Property для генерации списка кортежей поля и его значения, но возвращающего значение forienkey, если это отношение
Вот модели
class Category(BaseModel):
title = models.CharField(max_length=128)
description = models.TextField()
class Meta:
verbose_name = "Category"
verbose_name_plural = "Categories"
def __str__(self):
return str(self.title)
class Service(BaseModel):
category = models.ForeignKey(Category, limit_choices_to={"is_active": True}, on_delete=models.PROTECT)
title = models.CharField(max_length=128)
class Meta:
verbose_name = "Service"
verbose_name_plural = "Services"
def __str__(self):
return str(self.title)
def get_absolute_url(self):
return reverse_lazy("services:service_detail", kwargs={"pk": self.pk})
def get_fields(self):
return [
(
field.verbose_name.title(),
field.value_from_object(self) if field.is_relation else field.value_from_object(self),
)
for field in self._meta.fields
]
метод модели get_fields вернет следующий список
[
('Id', UUID('3bde9003-32cb-44ed-89c2-0d7b962d41a9')),
('Category', UUID('cc2ecdf8-c8e5-4cfe-998b-906d12cbccf9')),
('Title', 'Baby sitters'),
]
Результат можно перечислить по шаблону следующим образом
{% for name, value in object.get_fields %}
{% if value %}
<strong> {{name}} : {{ value }} </strong>
{% endif %}
{% endfor %}
Теперь я хочу, чтобы метод модели возвращал список следующим образом
[
('Id', UUID('3bde9003-32cb-44ed-89c2-0d7b962d41a9')),
('Category', 'Cleaning'),
('Title', 'Car Wash'),
]
То есть, возвращает значение __str__ определения модели, на которую ссылается forienkey, если поле модели является forienkey.
Цель - создать многоразовую страницу деталей, совместимую с каждой моделью