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

时间:2014-03-26 09:19:02

标签: python xml django serialization

让我们说我有一个类如:

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以及所有元数据,那么他们是谁的相关如max_length等。

它的目的是将类序列化为XML,如果它是ManyToManyField,ForeignKey或简单值,则XML中的表示将是不同的。

顺便说一句,如果有人知道XML的优秀类序列化器,它会对我有很大的帮助!

感谢您的回复!

2 个答案:

答案 0 :(得分:1)

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
# ...

答案 1 :(得分:0)

您可以使用 get_field() 获取特定字段的属性

MyClass._meta.get_field('attributeA').max_length