Django 1.9 - JSONField in Models

后端 未结 6 574
天命终不由人
天命终不由人 2020-12-30 02:16

I\'m trying to set up a models file in Django 1.9 using the new JSONField. I have found examples using postgres but none with MySql. In the examples with postgres they do

相关标签:
6条回答
  • 2020-12-30 02:31

    I know this question is about Django 1.9, but JSONField can now be used with all supported database backends with the release of Django 3.1.

    0 讨论(0)
  • 2020-12-30 02:35
    # Install jsonfield package
    pip install jsonfield
    
    # Define my model
    from django.db import models
    import jsonfield
    
    class MyModel(models.Model):
        the_json = jsonfield.JSONField()
    

    More detail:https://pypi.python.org/pypi/django-jsonfield

    0 讨论(0)
  • 2020-12-30 02:46

    UPDATE: Django 3.1 now supports JSONField natively for multiple databases: https://docs.djangoproject.com/en/dev/releases/3.1/#jsonfield-for-all-supported-database-backends


    As stated in other answers, Django's native JSONField (as of 1.9 and 1.10) is for PostgreSQL.

    Luckily, MySQL 5.7.8+ comes with a native JSON datatype. You can add it your Django project with the django-mysql package and Django 1.8+

    pip install django-mysql

    from django.db import models
    from django_mysql.models import JSONField
    
    class MyModel(models.Model):
        my_json_field = JSONField()
    

    Read more about the django_mysql JSONField here.

    0 讨论(0)
  • 2020-12-30 02:47

    Try to save data of this model in postgres db on my local machine:

    models.py:

    from django.db import models
    from django import forms
     
    from inputData.models import Input
     
    from django.contrib.postgres.fields import JSONField
     
    class Results(models.Model):
     
        generator = models.OneToOneField(Input, on_delete = models.CASCADE, primary_key = True)
     
        pvalues = JSONField()
    

    views.py

    def result(req, res_id):
        try:
            inp = Input.objects.get(pk = res_id)
            path = os.path.join(BASE_DIR, 'uploads\\' + str(res_id) + '\\t.txt')
            p_values = parse_res.main(path) 
            res = Results(generator = inp, pvalues = p_values)
            res.save(using = 'results')
        except Results.DoesNotExist:
            raise Http404
        return render(req, 'result.html', {'res': res})
    

    settings.py

    DATABASES = {
        'default': {
            'ENGINE': 'django.db.backends.sqlite3',
            'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
        },
        'results': {
            'ENGINE':'django.db.backends.postgresql',
            'NAME': 'results',
            'PASSWORD': 'password',
            'USER': 'user',
            'HOST': '127.0.0.1',
            'PORT': '8000'
    
        }
        
    }
    

    Model Results (see models.py) uses JSONField, which have about 200 bytes of data But at the line res.save(... of code views.py browser does response too long.

    Whatäs wrong with JSON? What problems can be on server besides cache?

    0 讨论(0)
  • 2020-12-30 02:51

    Django JSONField is Postgres only.

    https://docs.djangoproject.com/en/3.0/ref/contrib/postgres/fields/#django.contrib.postgres.fields.JSONField

    UPDATE:

    There is support for MYSQL via 3rd party library django-mysql

    0 讨论(0)
  • 2020-12-30 02:53

    For today I'd recommend using jsonfield2 or waiting for native JSON support for all database backends in Django 3.

    0 讨论(0)
提交回复
热议问题