Всем привет. Подскажите, как лучше сделать. Имеем таблицу некоторых объектов:

class SameObject(models.Model):
    value = models.IntegerField(choices=VALUE_CHOICES, default=VALUE_DEFAULT)
    method = models.IntegerField(choices=METHOD_CHOICES, default=METHOD_DEFAULT)
    status = models.IntegerField(choices=STATUS_CHOICES, default=STATUS_ACTIVE)
    # Другие поля...

Есть таблица, в которой пользователь определяет, кто и к каким его объектам может иметь доступ, с указанием прав доступа:

class SharedObjects(models.Model):
    FLAGS = (
        ('read', _('Чтение')),
        ('write', _('Запись')),
    )

    owner = models.ForeignKey(
        User, on_delete=models.CASCADE, verbose_name=_('Владелец объекта'), db_index=True,
        related_name='owner', db_column='owner'
    )
    guest = models.ForeignKey(
        User, on_delete=models.CASCADE, verbose_name=_('Для кого объект'), db_index=True,
        related_name='guest', db_column='guest'
    )
    obj = models.ForeignKey(SameObject, on_delete=models.CASCADE, verbose_name=_('Объект'), db_index=True)
    permissions = BitField(flags=[k for k, v in FLAGS])

Необходимо вывести список объектов, к каждому надо приложить список тех, кому дан доступ к этому объекту, с указанием прав (если такие есть в таблице SharedObjects), при этом в список должны попасть не только объекты, владельцем котороых является текущий пользователь, но и чужие объекты, к которым он имеет доступ.

И как все это красиво сериализовать?