How to store a dictionary in a Django database model's field

前端 未结 9 1420
不思量自难忘°
不思量自难忘° 2020-12-03 20:31

I need to save a dictionary in a model\'s field. How do I do that?

For example I have this code:

def create_random_bill(self):
    name_chars = re.co         


        
9条回答
  •  心在旅途
    2020-12-03 21:12

    Using a custom field type is my preferred solution - I'd rather have a few lines of custom code than support an entire 3rd party library for a single field type. Tony Abou-Assaleh has a great solution, but won't work for newer versions of Django.

    This is verified to work with Django 1.10.4

    import json
    
    from django.db import models
    from django.core.serializers.json import DjangoJSONEncoder
    
    
    class JSONField(models.TextField):
        """
        JSONField is a generic textfield that neatly serializes/unserializes
        JSON objects seamlessly.
        Django snippet #1478
    
        example:
            class Page(models.Model):
                data = JSONField(blank=True, null=True)
    
    
            page = Page.objects.get(pk=5)
            page.data = {'title': 'test', 'type': 3}
            page.save()
        """
    
        def to_python(self, value):
            if value == "":
                return None
    
            try:
                if isinstance(value, str):
                    return json.loads(value)
            except ValueError:
                pass
            return value
    
        def from_db_value(self, value, *args):
            return self.to_python(value)
    
        def get_db_prep_save(self, value, *args, **kwargs):
            if value == "":
                return None
            if isinstance(value, dict):
                value = json.dumps(value, cls=DjangoJSONEncoder)
            return value
    

提交回复
热议问题