Ограничение доступа пользователей к детальному просмотру на основе значения поля модели в Django

Я учусь и у меня есть проект управления изменениями, где моя модель содержит поле confidential, которое по умолчанию False, однако при создании экземпляра так называемый initiator может отметить его как True. Это означает, что только пользователи, которые являются частью текущей записи, так называемые signees, могут открыть и увидеть экземпляр. Я пытаюсь применить переопределение get_queryset к моему DetailView:

Это позволяет ограничить пользователей только теми, кто является моим signees, но в случае, если мое поле confidential будет False, никто из них не сможет открыть эти экземпляры модели.

Есть ли где-нибудь место, где я могу ввести логику, чтобы позволить прямое открытие не конфиденциального экземпляра модели?

Благодарю за помощь...

Я решил эту проблему следующей модификацией кода:

class MocDetailView(LoginRequiredMixin, DetailView):
model = Moc
template_name = 'moc/moc_detail.html'
context_object_name = 'moc'

def get_object(self, queryset=None):

    obj = super(MocDetailView, self).get_object(queryset=queryset)

    print(obj)

    confidential = obj.confidential
    initiator = obj.initiator

    # verifiers = obj.verifiers.all()
    verifier = obj.verifiers.filter(verifier_name=self.request.user)
    print(verifier)
    # coordinators = obj.coordinators.all()
    coordinator = obj.coordinators.filter(coordinator_name=self.request.user)
    print(coordinator)
    # reviewers = obj.reviewers.all()
    reviewer = obj.reviewers.filter(reviewer_name=self.request.user)
    print(reviewer)
    # approvers = obj.approvers.all()
    approver = obj.approvers.filter(approver_name=self.request.user)
    print(approver)
    # preimplements = obj.preimplements.all()
    preimplement = obj.preimplements.filter(actionee_name=self.request.user)
    print(preimplement)
    # authorizers = obj.authorizers.all()
    authorizer = obj.authorizers.filter(authorizer_name=self.request.user)
    print(authorizer)
    # postimplements = obj.postimplements.all()
    postimplement = obj.postimplements.filter(actionee_name=self.request.user)
    print(postimplement)
    # closers = obj.closers.all()
    closer = obj.closers.filter(closer_name=self.request.user)
    print(closer)

    if self.request.user.is_superuser or initiator == self.request.user or verifier or coordinator or reviewer or approver or preimplement or authorizer or postimplement or closer and confidential == True:
        return obj

    
    elif not confidential:
        return obj      

    else:
        raise Http404()
Вернуться на верх