Django избыточное отношение пользователей в связанных моделях для целей разрешения

Я довольно новичок в django и backend, я сделал две модели Car & Service которые имеют отношение к пользователю (для проверки прав доступа, при работе с ними) и теперь я пытаюсь связать одну с другой, я заметил, что они обе имеют отношение к пользователю, но Сервис не может существовать без Car, поэтому я начал задаваться вопросом, есть ли смысл иметь отношение к пользователю в Сервисе только для целей прав доступа, или лучше создать отдельные права доступа для каждой модели:

Модель автомобиля:

class Car(models.Model):
    id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
    user = models.ForeignKey(User, on_delete=models.CASCADE)
    ...

и Режим обслуживания:

class Service(models.Model):
    user = models.ForeignKey(User, on_delete=models.CASCADE)
    name = models.CharField(max_length=200)
    car = models.ForeignKey(
        "cars.Car",
        on_delete=models.CASCADE,
        related_name="services",
    )

и разрешение, используемое в обоих представлениях API для этих моделей:

class isAuthorOrReadOnly(permissions.BasePermission):
    def has_object_permission(self, request, view, obj):
        if request.method in permissions.SAFE_METHODS:
            return True
        return obj.user == request.user

Что бы вы посоветовали в этом случае?

Это больше дизайнерский, чем технический вопрос. Если в вашем приложении Service не может существовать без Car, то атрибут Service.user является лишним. Тогда вы можете переписать проверку разрешения на что-то вроде этого:

class isAuthorOrReadOnly(permissions.BasePermission):
    def has_object_permission(self, request, view, obj):
        if request.method in permissions.SAFE_METHODS:
            return True
        elif isinstance(obj, Car):
            return obj.user == request.user
        elif isinstance(obj, Service):
            return obj.car.user == request.user

Вернуться на верх