Получение значения dict в первом элементе списка

class PermsField(models.CharField):
    def __init__(self, *args, **kwargs):
        kwargs['max_length'] = 64
        kwargs['verbose_name'] =_('permission')
        super().__init__(*args, **kwargs)

    def deconstruct(self):
        name, path, args, kwargs = super().deconstruct()
        del kwargs["max_length"]
        del kwargs["verbose_name"]
        return name, path, args, kwargs


class AuzGroup(models.Model):
    perms = PermsField()


class Profile(models.Model):
    user = models.OneToOneField(
        to=User,
        on_delete=models.CASCADE,
        parent_link=True,
        related_name='profile',
        primary_key = True)
    perms = PermsField()
    auz_groups = models.ManyToManyField(
        AuzGroup,
        through='ProfileToAuzGroupM2M')


class ProfileToAuzGroupM2M(models.Model):
    auz_group = models.ForeignKey('AuzGroup', on_delete=models.CASCADE)
    profile = models.ForeignKey('Profile', on_delete=models.CASCADE)

[{'perms': "['consultant', 'project manager', 'admin', 'viewer admin']"}]

Я создаю свой пользовательский AuzBackEnd и хочу воссоздать функцию get_group_permissions(self, user_obj, obj=None). Эта функция должна возвращать переменную perms в классе AuzGroup.

Я не могу просто return user_obj.profile.auz_group.perms. Я нашел другой способ, я использую значения, поэтому, когда я использую его, я делаю list(user_obj.profile.auz_groups.values('perms')) (я использую list(), чтобы иметь хороший тип). При таком решении я получаю '[{'perms': "['consultant', 'project manager', 'admin', 'viewer admin']"}]", но мне нужно только "['consultant', 'project manager', 'admin', 'viewer admin']", проще говоря, мне нужно значение dict в первом элементе списка. Я не знаю, как я могу это сделать, если вы можете мне помочь, спасибо. PS: Лучшее, что у меня есть это list(list(user_obj.profile.auz_groups.values('perms'))[0]['perms'].split(",")), но это дает мне '{"'admin'", "'project manager'", "'consultant'", "'viewer admin'"}' и я получил dict вместо списка и формат не очень хороший.

Вернуться на верх