Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to store a dictionary on a Django Model?

I need to store some data in a Django model. These data are not equal to all instances of the model.

At first I thought about subclassing the model, but I’m trying to keep the application flexible. If I use subclasses, I’ll need to create a whole class each time I need a new kind of object, and that’s no good. I’ll also end up with a lot of subclasses only to store a pair of extra fields.

I really feel that a dictionary would be the best approach, but there’s nothing in the Django documentation about storing a dictionary in a Django model (or I can’t find it).

Any clues?

like image 806
AticusFinch Avatar asked Dec 31 '08 03:12

AticusFinch


People also ask

How to store dict in django models?

To store a dictionary on a Python Django Model, we can create a JSONField with the jsonfield package. to install it. to create the json JSONField in MyModel to create the JSON field.

How do you store a dictionary?

Saving Dictionary to a File This method would include the following steps: Opening a file in write/append text mode. Converting the dictionary into a string. Entering the converted string into the file using write function.

Can you store objects in dictionaries Python?

The Python list stores a collection of objects in an ordered sequence. In contrast, the dictionary stores objects in an unordered collection. However, dictionaries allow a program to access any member of the collection using a key – which can be a human-readable string.


1 Answers

If it's really dictionary like arbitrary data you're looking for you can probably use a two-level setup with one model that's a container and another model that's key-value pairs. You'd create an instance of the container, create each of the key-value instances, and associate the set of key-value instances with the container instance. Something like:

class Dicty(models.Model):     name      = models.CharField(max_length=50)  class KeyVal(models.Model):     container = models.ForeignKey(Dicty, db_index=True)     key       = models.CharField(max_length=240, db_index=True)     value     = models.CharField(max_length=240, db_index=True) 

It's not pretty, but it'll let you access/search the innards of the dictionary using the DB whereas a pickle/serialize solution will not.

like image 80
Parand Avatar answered Sep 22 '22 18:09

Parand