Разрешить создание только в том случае, если модель является подклассом миксина

Я хотел бы разрешить создание комментария только тем моделям, которые являются подклассами определенного миксина.

Например, модель Post будет иметь обратное отношение GenericRelation к модели Comments. Модель комментариев использует пользовательский механизм типов контента, реализованный поверх django's из-за того, что проект использует шардинг между несколькими базами данных. Обратное отношение от модели Post к Comments необходимо для того, чтобы иметь возможность удалять комментарии, когда пост также удален.

Приведу простой пример кодирования того, чего я хотел бы достичь:

class Post(models.Model, HasCommentsMixin):
some_fields = ....


class HasCommentsMixin(models.Model):
has_comments = GenericRelation('comments.Comment')
class Meta:
    abstract = True

Хотелось бы получить способ сказать внутри проверки разрешения модели: если класс является подклассом HasCommentsMixin, разрешить создание комментария. Таким образом, для модели Post комментарии могут быть созданы. Но если это не подкласс Mixin, комментарии не должны быть разрешены.

Надеюсь, я предоставил описание, которое имеет смысл. Я не могу поделиться реальным кодом из-за лицензии и защиты продукта.

Спасибо.

Для этого можно использовать функцию isinstance() в сочетании с функцией issubclass() в проверке разрешения, чтобы проверить, является ли модель подклассом HasCommentsMixin.

class IsCommentAllowed(permissions.BasePermission):
    def has_permission(self, request, view):
        model = view.get_queryset().model
        if isinstance(model, HasCommentsMixin) or issubclass(model, HasCommentsMixin):
            return True
        return False
Вернуться на верх