11👍
The __dict__
gives all the attributes of the instance, but you don’t want all that extra baggage – for the purposes of serialization, you are only interested in the fields.
Your model does not contain anything special so the built-in helper function model_to_dict
should be enough for your needs:
import json
from django.forms.models import model_to_dict
oi = OrgInvite.objects.get(token=100)
oi_dict = model_to_dict(oi)
oi_serialized = json.dumps(oi_dict)
Your example was simple, only containing CharField
, BooleanField
, and ForeignKey
all of which we can dump to json
trivially.
For more complicated models, you might consider writing your own serializer. In this case, I recommend using the popular django-rest-framework which does all the work for you.
from rest_framework import serializers
class OrgInviteSerializer(serializers.ModelSerializer):
class Meta:
model = OrgInvite
fields = '__all__'
1👍
If you do invite.__dict__
, it’s going to give you a dictionary of all data related to one invite
object. However, the dict’s values are not necessarily primitive types, but objects as well(ModelState
is just one of them). Serializing that would not only not working because json doesn’t accept python objects, but you could also serialize a lot of meta data that’s not used.
Check out json official website to see what data types are json serializable. The fix would be either using django model serializer, or manually create a dict that in compliance to json format.
- "x Days ago' template filter in Django?
- Django's "dumpdata" or Postgres' "pg_dump"?
- Setup.py exclude some python files from bdist
- Django with system timezone setting vs user's individual timezones
- AssertionError: The field ' ' was declared on serializer ' ', but has not been included in the 'fields' option
0👍
object
is not one of those types. Dictionaries, lists (maybe tuples), floats, strings, integers, bools, and None I believe are the types that Python can serialize into JSON natively.
However, it looks like Django has some built-in serializers that may work for you.
I’m guessing that
from django.core import serializers
data = serializers.serialize("json", OrgInvite.objects.filter(token=100))
should work for you
- How can i get all models in django 1.8
- Next previous links from a query set / generic views
- Is exposing a session's CSRF-protection token safe?
- Django render_to_string() ignores {% csrf_token %}