Получите значение для каждого поля модели с помощью _meta - PullRequest
2 голосов
/ 01 августа 2020

В моей модели у меня есть метод получения verbose_name для каждого поля с _meta. Как я могу получить значение для каждого поля аналогичным образом с помощью _meta?

class Description(models.Model):
    name = models.OneToOneField(Breeds, on_delete=models.CASCADE, primary_key=True)
    description = models.TextField()
    history = models.TextField()
    nature = models.TextField()
    care = models.TextField()
    feed = models.TextField()
    health = models.TextField()
    some_facts = models.TextField()

    def __str__(self):
        return self.name.breed

    def get_verbose_name(self):
        return [field.verbose_name for field in Description._meta.fields]

Я хочу получить значения, аналогичные методу get_verbose_name.

1 Ответ

1 голос
/ 01 августа 2020

Вы можете получить значения, используя field.get_attname(), чтобы получить имя атрибута, а затем получить доступ к getattr(self, field.get_attname()):

class BaseModel(models.Model):
        
    # …
    
    def get_values(self):
        return {
            field.name: <b>getattr(self, field.get_attname())</b>
            for field in <b>cls</b>._meta.fields
        }

После этого будет возвращен словарь, который сопоставляет имена полей с соответствующий объект.

или в виде списка значений:

class BaseModel(models.Model):
        
    # &hellip;
    
    def get_values(self):
        return [
            <b>getattr(self, field.get_attname())</b>
            for field in <b>cls</b>._meta.fields
        ]
...