joanbm
joanbm

Reputation: 811

Get Python type of Django's model field?

How can I get corresponding Python type of a Django model's field class ?

from django.db import models

class MyModel(models.Model):
    value = models.DecimalField()

type(MyModel._meta.get_field('value'))  # <class 'django.db.models.fields.DecimalField'>

I'm looking how can I get corresponding python type for field's value - decimal.Decimal in this case.

Any idea ?

p.s. I've attempted to work around this with field's default attribute, but it probably won't work in all cases where field has no default value defined.

Upvotes: 7

Views: 3625

Answers (2)

Rutger Woolthuis
Rutger Woolthuis

Reputation: 26

An ugly alternative is to check the field's repr():

if 'DecimalField' in repr(model._meta.get_field(fieldname)):
    return decimal.Decimal
else:
    ...

However, you have to this for all types seperatly.

Upvotes: 0

Tianwei Chen
Tianwei Chen

Reputation: 148

I don't think you can decide the actual python type programmatically there. Part of this is due to python's dynamic type. If you look at the doc for converting values to python objects, there is no hard predefined type for a field: you can write a custom field that returns object in different types depending on the database value. The doc of model fields specifies what Python type corresponds to each field type, so you can do this "statically".

But why would you need to know the Python types in advance in order to serialize them? The serialize modules are supposed to do this for you, just throw them the objects you need to serialize. Python is a dynamically typed language.

Upvotes: 2

Related Questions