Guest User

Untitled

a guest
Dec 18th, 2018
75
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.77 KB | None | 0 0
  1. from django.shortcuts import get_object_or_404
  2.  
  3.  
  4. class ExtraObjectMixin(object):
  5. """ Provides a second object via URL parameter. """
  6.  
  7. model_extra = None
  8. """ Type of the model. """
  9.  
  10. pk_url_kwarg_extra = None
  11. """ Argument name for the object's PK. """
  12.  
  13. slug_url_kwarg_extra = None
  14. """ Argument name for the object's slug. """
  15. slug_field_extra = None
  16. """
  17. Object's field name that maps the slug argument.
  18.  
  19. If undefined, will use `slug_url_kwarg_adicional`.
  20. """
  21.  
  22. object_extra = None
  23. """ Extra object's instance. """
  24.  
  25. def dispatch(self, request, *args, **kwargs):
  26. """ Prepare the extra object. """
  27. self.get_object_adicional()
  28. return super(ExtraObjectMixin, self).dispatch(request, *args, **kwargs)
  29.  
  30. def get_object_adicional(self):
  31. """ Try to prepare the extra object . """
  32. # Re-use the object if it's been loaded
  33. if self.object_extra is not None:
  34. return self.object_extra
  35. # Required fields
  36. if not self.model_extra or not (self.pk_url_kwarg_extra or self.slug_url_kwarg_extra):
  37. raise AttributeError("Define the `model_extra` field and `pk_url_kwarg_extra` or `slug_url_kwarg_extra`.")
  38. # Use the PK to load the instance
  39. if self.pk_url_kwarg_extra:
  40. self.object_extra = get_object_or_404(self.model_extra, pk=self.kwargs[self.pk_url_kwarg_extra])
  41. # Use the slug to load the instance
  42. elif self.slug_url_kwarg_extra:
  43. # Check if should use the slug argument or it's own field name
  44. slug_field = self.slug_field_extra or self.slug_url_kwarg_extra
  45. self.object_extra = get_object_or_404(self.model_extra, **{slug_field: self.kwargs[self.slug_url_kwarg_extra]})
  46. return self.object_extra
Add Comment
Please, Sign In to add comment