首页 > 解决方案 > 使用 _meta 获取每个模型字段的值

问题描述

在我的模型中,我有一种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方法的值。

标签: pythondjangodjango-models

解决方案


您可以通过使用field.get_attname()获取属性的名称来获取值,然后访问getattr(self, field.get_attname())

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

然后,这将返回一个将字段名称映射到相应对象的字典。

或作为值列表:

class BaseModel(models.Model):
        
    # …
    
    def get_values(self):
        return [
            getattr(self, field.get_attname())
            for field in cls._meta.fields
        ]

推荐阅读