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