is it possible to use javascript to get data from django models db?

14,301

Solution 1

In your view:

from django.core import serializers
json_serializer = serializers.get_serializer("json")()
companies = json_serializer.serialize(Company.objects.all().order_by('id')[:5], ensure_ascii=False)

In template:

var companies = '{{ companies|escapejs }}';

This is only for getting your data models into JS. For manipulating them, you should create some views that will get called from JS (by AJAX). They should probably return JSON. Check out https://dev.to/brian101co/how-to-return-a-json-response-in-django-gen or https://simpleisbetterthancomplex.com/tutorial/2016/07/27/how-to-return-json-encoded-response.html on how to simply return only JSON from a view.

Solution 2

You must serialize your companies model data to json, so javascript will be able to read it.

So you'll need to have two model variables, companies (the one you have right now) and companies_json which will hold the serialized data.

from django.core import serializers
companies_json = serializers.serialize("json", Company.objects.all())

I haven't tested this.

Share:
14,301
iCodeLikeImDrunk
Author by

iCodeLikeImDrunk

Updated on June 05, 2022

Comments

  • iCodeLikeImDrunk
    iCodeLikeImDrunk almost 2 years

    I am trying to get the django model object to show on a html page. Of course when I tried to use {{ object }}, I get an error.

    How do I properly get the django data model and manipulate the attributes using javascript?

    the url:

    ('^all_companies$', 'companies.views.all_companies')
    

    the view:

    def all_companies(request): 
        companies = Company.objects.all().order_by('id')[:5];   
        return direct_to_template(request, 'all_companies.html', {'companies': companies} );
    

    the html:

    {% block sidebar %}
        <div id="sidebar">
            <!-- like google maps, short list of company info -->
            <ul>
                {% for comp in companies %}
                    <li>{{ comp }}</li>                 
                {% endfor %}
            </ul>
        </div>
    {% endblock %}
    

    the js:

    var tmp = {{ companies }}