From d2243ba93d904e92481e4014d364ef7394bae177 Mon Sep 17 00:00:00 2001 From: Henrik Levkowetz Date: Thu, 19 Mar 2020 22:42:43 +0000 Subject: [PATCH] Added a utility function to convert objects to dictionaries (for comparison, for instance) - Legacy-Id: 17468 --- ietf/utils/models.py | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/ietf/utils/models.py b/ietf/utils/models.py index 1ea816bd2..0915537fd 100644 --- a/ietf/utils/models.py +++ b/ietf/utils/models.py @@ -1,4 +1,6 @@ -# Copyright The IETF Trust 2015, All Rights Reserved +# Copyright The IETF Trust 2015-2020, All Rights Reserved + +import itertools from django.db import models @@ -26,3 +28,17 @@ class OneToOneField(models.OneToOneField): def __init__(self, to, on_delete=models.CASCADE, **kwargs): return super(OneToOneField, self).__init__(to, on_delete=on_delete, **kwargs) +def object_to_dict(instance): + """ + Similar to django.forms.models.model_to_dict() but more comprehensive. + + Taken from https://stackoverflow.com/questions/21925671/#answer-29088221 + with a minor tweak: .id --> .pk + """ + opts = instance._meta + data = {} + for f in itertools.chain(opts.concrete_fields, opts.private_fields): + data[f.name] = f.value_from_object(instance) + for f in opts.many_to_many: + data[f.name] = [i.pk for i in f.value_from_object(instance)] + return data