Custom Fields in Django
I was helping someone today in the Django IRC channel and the question came across about storing a denormalized data set in a single field. Typically I do such things by either serializing the data, or by separating the values with a token (comma for example).
Django has a built-in field type for CommaSeparatedIntegerField, but most of the time I’m storing strings, as I already have the integers available elsewhere. As I began to answer the person’s question by giving him an example of usage of serialization + custom properties, until I realized that it would be much easier to just write this as a Field subclass.
So I quickly did, and replaced a few lines of repetitive code with two new field classes in our source:
Update: There were some issues with my understanding of how the metaclass was working. I’ve corrected the code and it should function properly now.
SerializedDataField
This field is typically used to store raw data, such as a dictionary, or a list of items, or could even be used for more complex objects.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | |
SeparatedValuesField
An alternative to the CommaSeparatedIntegerField, it allows you to store any separated values. You can also optionally specify atoken parameter.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | |