14

I am a beginner in Django. And I need to convert Model instance in to dictionary similar as Model.objects.values do, with relation fields. So I write a little function to do this:

def _get_proper(instance, field): if field.__contains__("__"): inst_name = field.split("__")[0] new_inst = getattr(instance, inst_name) next_field = "__".join(field.split("__")[1:]) value = _get_proper(new_inst, next_field) else: value = getattr(instance, field) return value def instance_to_dict(instance, fields): return {key: _get_proper(instance, key) for key in fields} 

So, i can use it in such way:

user_obj = User.objects.select_related(...).get(...) print instance_to_dict(user_obj, ["name", "city__name", "city_id"]) 

May you propose the better solution? Thanks! P.S. Sorry for my English.

1

1 Answer 1

27

This actually already exists in Django, but its not widely documented.

from django.forms import model_to_dict my_obj = User.objects.first() model_to_dict(my_obj, fields = [...], # fields to include exclude = [...], # fields to exclude ) 
Sign up to request clarification or add additional context in comments.

3 Comments

I know about it, but this function doesn't work with related fields like city__name
The link didn't work. This is the updated link: timsaylor.com/convert-django-model-instances-to-dictionaries
And the link in the link (to source code) is github.com/django/django/blob/master/django/forms/models.py#L70

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.