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.

Цель - создать многоразовую страницу деталей, совместимую с каждой моделью

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