Coverage for api\ownership.py: 86.2%
21 statements
« prev ^ index » next coverage.py v7.15.2, created at 2026-08-30 20:58 +0200
« prev ^ index » next coverage.py v7.15.2, created at 2026-08-30 20:58 +0200
1from django.core.exceptions import ImproperlyConfigured
2from django.db.models import Q
5class OwnedQuerysetMixin:
6 """
7 Limita el queryset a los objetos del usuario que hace la peticion
8 """
9 owner_field = 'id_user'
11 def get_queryset(self):
12 qs = super().get_queryset()
13 # Sin usuario autenticado no hay nada que sea suyo
14 if not self.request.user.is_authenticated: 14 ↛ 15line 14 didn't jump to line 15 because the condition on line 14 was never true
15 return qs.none()
17 fields = self.owner_field
18 if isinstance(fields, str):
19 fields = (fields,)
21 condition = Q()
22 for field in fields:
23 condition |= Q(**{field: self.request.user.pk})
25 return qs.filter(condition)
28class OwnedCreateMixin:
29 """
30 Obliga a que el objeto creado tenga como dueño al usuario que hace la peticion
31 """
32 def perform_create(self, serializer):
33 field = self.owner_field
35 if not isinstance(field, str) or '__' in field: 35 ↛ 36line 35 didn't jump to line 36 because the condition on line 35 was never true
36 raise ImproperlyConfigured(
37 f"{type(self).__name__}: OwnedCreateMixin necesita un `owner_field` "
38 f"que sea un campo directo del modelo, y no {field!r}."
39 )
41 serializer.save(**{field: self.request.user})