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

1from django.core.exceptions import ImproperlyConfigured 

2from django.db.models import Q 

3 

4 

5class OwnedQuerysetMixin: 

6 """ 

7 Limita el queryset a los objetos del usuario que hace la peticion 

8 """ 

9 owner_field = 'id_user' 

10 

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() 

16 

17 fields = self.owner_field 

18 if isinstance(fields, str): 

19 fields = (fields,) 

20 

21 condition = Q() 

22 for field in fields: 

23 condition |= Q(**{field: self.request.user.pk}) 

24 

25 return qs.filter(condition) 

26 

27 

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 

34 

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 ) 

40 

41 serializer.save(**{field: self.request.user})