Guest User

Untitled

a guest
Dec 15th, 2017
74
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.16 KB | None | 0 0
  1. from django.core import exceptions
  2. from django.db.models.fields.related import ForeignKey
  3. from django.db.utils import ConnectionHandler, ConnectionRouter
  4.  
  5. connections = ConnectionHandler()
  6. router = ConnectionRouter()
  7.  
  8.  
  9. class SpanningForeignKey(ForeignKey):
  10.  
  11. def validate(self, value, model_instance):
  12. if self.rel.parent_link:
  13. return
  14. # Call the grandparent rather than the parent to skip validation
  15. super(ForeignKey, self).validate(value, model_instance)
  16. if value is None:
  17. return
  18.  
  19. using = router.db_for_read(self.rel.to, instance=model_instance)
  20. qs = self.rel.to._default_manager.using(using).filter(
  21. **{self.rel.field_name: value}
  22. )
  23. qs = qs.complex_filter(self.get_limit_choices_to())
  24. if not qs.exists():
  25. raise exceptions.ValidationError(
  26. self.error_messages['invalid'],
  27. code='invalid',
  28. params={
  29. 'model': self.rel.to._meta.verbose_name, 'pk': value,
  30. 'field': self.rel.field_name, 'value': value,
  31. }, # 'pk' is included for backwards compatibility
  32. )
Add Comment
Please, Sign In to add comment