伙计们,我正在尝试获取模型属性的类型。例如,考虑以下模型:
class Option(models.Model):
option_text = models.CharField(max_length=400)
option_num = models.IntegerField()
# add field to hold image or a image url in future
def __unicode__(self):
return self.option_text
Run Code Online (Sandbox Code Playgroud)
我正在以编程方式设置此模型的每个属性。我需要访问属性的类型。例如,对于option_num,我应该能够获得“ IntegerField”或等效值。
我看到了元api,也阅读了源代码。但是我看不到检索内部类型的方法。
model._meta.get_field(attr_value).getInternalType() => gives me an error.
Run Code Online (Sandbox Code Playgroud)
获取“ CharField”对象没有属性“获取内部类型”。
为了澄清一点,我需要知道一个属性是字符串还是整数的原因是,如果从前端得到一个字符串,它实际上是一个整数,我想进行类型转换。
救命?
谢谢!
您已经接近元选项,但您需要记住一些 Python PEP8 Love。
如果你有这样的模型:
class Client(models.Model):
code = models.IntegerField()
name = models.CharField(max_length=96)
...
...
Run Code Online (Sandbox Code Playgroud)
您可以通过以下方式获取类型名称:
Client._meta.get_field('code').get_internal_type()
u'IntegerField'
Run Code Online (Sandbox Code Playgroud)
或者你可以通过以下方式获取类型:
type(Client._meta.get_field('name'))
django.db.models.fields.CharField
Run Code Online (Sandbox Code Playgroud)
直接像类方法一样,而不仅仅是来自类实例。你的选择。
重点是使用
model._meta.get_field(attr_name).get_internal_type()
Run Code Online (Sandbox Code Playgroud)
代替
model._meta.get_field(attr_value).getInternalType()
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2789 次 |
| 最近记录: |