Я делаю простое приложение для недвижимости, в котором пользователи должны быть разделены на две разные группы. Обычный пользователь и брокер. Я использую админку Django для создания групп пользователей. Я также использую сигнал post_save для назначения всех новых пользователей в группу обычных пользователей. На первый взгляд, он работает хорошо, и в админке Django он показывает мне, что пользователь находится в соответствующей группе. Но когда я пытаюсь напечатать self.request.user.groups, значение равно None. Также, когда я пытаюсь проверить, есть ли у пользователей разрешение что-то делать, независимо от разрешений, которые я дал, просмотр, который я проверяю, всегда дает мне 403 Forbidden независимо от того, есть ли у пользователя разрешение или нет. Я использую представления на основе классов и PermissionRequiredMixin соответственно. Вот моя пользовательская модель:
class DjangoEstatesUser(auth_models.AbstractBaseUser, auth_models.PermissionsMixin):
USERNAME_MAX_LENGTH = 30
username = models.CharField(
max_length=USERNAME_MAX_LENGTH,
unique=True,
)
date_joined = models.DateTimeField(
auto_now_add=True,
)
is_staff = models.BooleanField(
default=False,
)
USERNAME_FIELD = 'username'
objects = DjangoEstatesUserManager()
Также сигнал для назначения новых пользователей в группу:
@receiver(post_save, sender=DjangoEstatesUser)
def create_user_profile(sender, instance, created, **kwargs):
if created:
instance.groups.add(Group.objects.get(name='Users'))
и это одно представление, которое я пытаюсь ограничить для разных пользователей:
class AddEstateView(auth_mixins.LoginRequiredMixin, auth_mixins.PermissionRequiredMixin, views.CreateView):
permission_required = 'auth_permission.add_estate'
template_name = 'main/estates/add_estate.html'
form_class = AddEstateForm
def get_form_kwargs(self):
kwargs = super().get_form_kwargs()
kwargs['user'] = self.request.user
return kwargs
def get_success_url(self):
return reverse_lazy('profile details', kwargs = {'pk': self.object.user_id})
И это группы с разрешениями. Brokers_group и группа_пользователей.
А это мои db_tables и auth_permission_table.
Я не могу понять, где я ошибаюсь или что я делаю неправильно, любая помощь будет оценена! Заранее спасибо!
self.request.user.groups
печатает всегда None
: это RelatedManager
[Django-doc], а не QuerySet
. Менеджеры будут печатать название модели с None
, поэтому для Model
с именем ModelName
в app_name
будет напечатано:
app_name.ModelName.None
Вы печатаете элементы с self.request.user.groups.all()
:
print(self.request.user.groups.all())
Я загрузил их в вопросе, но они мне подходят. ..
@RadoslavHadzhiev: но приложение вроде называется main
, значит, скорее всего main.add_estate
.
@RadoslavHadzhiev: можешь поискать
code_name
твоего разрешения?