如何获取模型属性的属性?

1 投票
2 回答
2118 浏览
提问于 2025-04-17 23:57

假设我有一个这样的类:

class MyClass(models.Model):
    attributeA = models.CharField(max_length=100)
    attributeB = models.IntegerField()
    attributeC = models.CharField(max_length = 150, blank=True, nullable = True)
    attributeD = models.ForeignKey('ModelB',related_name='FK_modelB')
    attributeE = models.ManyToManyField('ModelC')

我想做的是获取每个属性的所有特性,而不仅仅是用下面这个方法得到的名字:

my_instance._meta.get_all_field_name()

(这个方法只给我返回了属性名称的列表)。不,我想要的是,对于每个属性,知道它的类型是什么(比如 CharField、IntegerField、ForeignKey、ManyToManyField 等等),如果是 ForeignKey 或 ManyToManyField,还想知道它们之间的关系,以及所有的元数据,比如最大长度等等。

这样做的目的是将一个类序列化成 XML 格式,而在 XML 中的表现形式会因为是 ManyToManyField、ForeignKey 还是简单值而有所不同。

顺便问一下,如果有人知道一个很好的类序列化成 XML 的工具,那对我会有很大帮助!

谢谢大家的回复!

2 个回答

0

你可以通过使用 get_field() 来获取某个特定字段的属性。

比如,你可以这样写:MyClass._meta.get_field('attributeA').max_length

2

Django的模型里面有一个叫做_meta.fields的东西,它是一个字段列表,你可以通过它来获取字段的属性信息:

>>> from django.contrib.auth.models import User
>>> u = User.objects.all()[0]
>>> u._meta.fields[1].__class__.__name__
'CharField'
>>> u._meta.fields[1].name
'username'
>>> u._meta.fields[1].max_length
30
>>> u._meta.fields[1].blank
False
# ...

撰写回答