Добавить пользователя в группу после сигнала post_save - PullRequest
1 голос
/ 18 июня 2020

Я хочу добавить пользователя в группу после сохранения объекта пользователя. У каждого пользователя есть permission level, соответствующий группе, к которой он принадлежит. Например, если permission level равно 3, то пользователь принадлежит Group_3 и так далее.

Это мой код:

models.py

class User(AbstractUser):
    ...
    ID = models.IntegerField(default=random_integer, unique=True)
    permissions = models.IntegerField(default=0)
    ...
    def __str__(self):
        return self.first_name


def add_2_group(sender, instance, **kwargs):
    if kwargs['created']:
        if instance.permissions == 3:
            group = Group.objects.get(name='Group_3')  
            group.user_set.add(instance)

post_save.connect(add_2_group, sender=User)

Как видите, я использую сигнал post_save для добавления пользователя в группу после сохранение пользовательского экземпляра. Однако это не работает. Судя по всему, после сохранения пользователя ничего не происходит. Как мне решить эту проблему?


EDIT:

Я понял, в чем проблема: по умолчанию permission level установлено на 0, и я проверял только permission level из 3. Однако теперь я столкнулся с другой странной проблемой. Это изменение, которое я внес в код:

def add_2_group(sender, instance, **kwargs):
    if kwargs['created']:
        if instance.permissions == 0:     
            group = Group.objects.get(name='Group_0')  
            instance.groups.add(group)

    else:
        if instance.permissions == 3:   
            group = Group.objects.get(name='Group_3')            
            instance.groups.add(group)

В основном, когда я сохраняю модель пользователя с permission level из 3, группа не обновляется. Таким образом, пользователь всегда остается на Group_0 и не становится частью Group_3. Похоже, что instance.groups.add(group) не работает при сохранении пользователя; он работает только при его создании. Почему это происходит и как это исправить?

1 Ответ

1 голос
/ 18 июня 2020

Чтобы решить эту проблему, мне пришлось удалить поле groups из fieldsets в admin.py, так как это помешало бы добавлению экземпляра в группу.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...