Удалить группу ее создателем Django - PullRequest
1 голос
/ 06 мая 2019

быстрый вопрос

У меня есть приложение, в котором пользователи могут создавать группы для своих друзей, после добавления некоторых я хотел бы оставить такие функции, как delete или update, только для пользователя, создавшего группу. Кто-нибудь может помочь? Мое решение до сих пор жестко запрограммировано, если я добавлю конкретный идентификатор человека, только этот пользователь может удалить группу, но я хотел бы иметь более универсальное решение.

views.py

class TripDeleteView(LoginRequiredMixin, UserPassesTestMixin, DeleteView):
    model = Trip
    success_url = '/'
    template_name = 'tripplanner/delete_trip_confirm.html'

    def test_func(self):
        detailView = self.get_object()
        # Correct, not hardcode
        if self.request.user == detailView.profile.get(pk=2):
            return True
        return False

models.py

class Trip(models.Model):
    ...
    profile = models.ManyToManyField(User, related_name='profile_groups')

class Profile(models.Model):
    user = models.OneToOneField(User, on_delete=models.CASCADE)
    ...

1 Ответ

0 голосов
/ 07 мая 2019

Решение, как и ожидалось, очень простое, я только что добавил в свою модель Trip еще одно поле, которое owner, благодаря этому у меня есть только один профиль, который получит необходимые разрешения. Ниже код:

models.py

class Trip(models.Model):

    owner = models.ManyToManyField(User, related_name='profile_owners')
    members = models.ManyToManyField(User, related_name='profile_members')

views.py

class TripDeleteView(LoginRequiredMixin, UserPassesTestMixin, DeleteView):
    model = Trip
    ...

    def test_func(self):
        detailView = self.get_object()
        if self.request.user in detailView.owner.all():
            return True
        return False
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...