【问题标题】:How to get properties of a model attribute?如何获取模型属性的属性?
【发布时间】:2014-05-04 13:53:50
【问题描述】:

假设我有一个类,例如:

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 类序列化器,那将对我有很大帮助!

感谢您的回复!

【问题讨论】:

  • 内置serialization framework有什么问题?
  • 我就是这么做的!我不知道 Django 有一个很好的序列化内置框架:)

标签: python xml django serialization


【解决方案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
# ...

【讨论】:

【解决方案2】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-06-10
    • 2015-04-12
    • 2015-08-23
    • 2014-03-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多