How to dynamically add fields to a Django model
For a project I needed to create a Django model from a list of fields that were defined somewhere else. It took me hours to get this to work, so to save you the time, here is the solution:
fields = ['field_a', 'field_b', 'field_c']
# the base model with some basic fields
class MyModel(models.Model):
date = models.DateField()
# add the extra fields after the model has been created
for field in fields:
MyModel.add_to_class(field, models.DecimalField(decimal_places=4, max_digits=10))
My first instinct was to create an __init__
function inside the model class and use that to create the extra fields, but since the __init__
function is never called for models, this didn’t work. Creating the extra fields after you created the model class itself however works just fine.