Django:获取模型的字段名

vjrehmav  于 2023-03-04  发布在  Go
关注(0)|答案(2)|浏览(193)

我尝试在react中创建一个表,它使用django后端的表信息。
我想从API获取表的列,所以我尝试更新模型:

class Activity(models.Model):
    aid = models.AutoField(primary_key=True)
    uid = models.ForeignKey(USER_MODEL, default=1, verbose_name="Category", on_delete=models.SET_DEFAULT,
                            db_column="uid")
    rid = models.IntegerField()
    action = models.TextField(max_length=254, blank=True, null=True)
    time = models.TextField(max_length=254, blank=True, null=True)
    table = models.TextField(max_length=254, blank=True, null=True)

    class Meta:
        managed = False
        db_table = "activity"

    @property
    def fields(self):
        return [f.name for f in self._meta.fields]

我尝试使用fields()作为方法来获取模型的所有“列”名称,以便将它们放在API的响应中,但是它不起作用。
如何从模型的 meta中获取django模型的字段名?

ca1c2owp

ca1c2owp1#

如果你想要一个方法来获取模型类中的所有字段名,我建议把fields从property改为classmethod

class Activity(models.Model):
    aid = models.AutoField(primary_key=True)
    uid = models.ForeignKey(USER_MODEL, default=1, verbose_name="Category", on_delete=models.SET_DEFAULT,
                            db_column="uid")
    rid = models.IntegerField()
    action = models.TextField(max_length=254, blank=True, null=True)
    time = models.TextField(max_length=254, blank=True, null=True)
    table = models.TextField(max_length=254, blank=True, null=True)

    class Meta:
        managed = False
        db_table = "activity"

    @classmethod
    def get_field_names(cls):
        return [f.name for f in cls._meta.fields]
bvjxkvbb

bvjxkvbb2#

您可以使用get_fields()获取所有字段,也可以使用模型_meta API中的get_field('field_name')函数获取特定字段。
用法:

fields = model._meta.get_fields()
my_field = model._meta.get_field('field_name')

我相信这将返回一个Field对象的列表。要从示例中获取每个字段的值,请使用getattr(instance,www.example.com)。field.name).
参考:检索模型的所有字段示例

相关问题