如何获取模型属性的属性?
假设我有一个这样的类:
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
# ...