Получение значения 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 вместо списка и формат не очень хороший.