Я пытаюсь написать универсальный метод, который может взять любую модель Django и вернуть ее в виде словаря.
Так, например, если мои модели определены так (очень обобщенно):
class A(models.Model):
somefieldA = models.TextField()
m2mfield = models.ManyToManyField(B, through='AandB')
def __unicode__(self):
return self.somefieldA
class B(models.Model):
somefieldB = models.TextField()
def __unicode__(self):
return self.somefieldB
class AandB(models.Model):
a = models.ForeignKey(A)
b = models.ForeignKey(B)
field1 = models.DecimalField()
field2 = models.TextField()
field3 = models.DateField()
Теперь предположим, что у нас есть экземпляр объекта A a_obj
.
Я могу получить все связанные объекты B, используя:
# This loop is there because I am working with other fields as well.
def instance_to_dict(instance):
for field in instance._meta.get_fields():
if field.many_to_many:
m2m_mgr = getattr(instance, field.name)
for idx, assoc_obj in enumerate(m2m_mgr.all()):
assoc_obj_str = str(assoc_obj)
# How to obtain the related through field values?
# m2m_mgr.through.objects.get() would need prior knowlegde
# of field name so get(a=instance, b=assoc_obj) is not possible
# m2m_mgr.through.objects.all() fetches all the objects
# in the Many to Many manager.
А затем позвоните instance_to_dict(a_obj)
. Этот метод может быть вызван путем передачи экземпляров других моделей.
В идеале я хотел бы создать для obj и obj соответствующие поля для любого объекта. Возможно ли это сделать?