He leído sobre las señales de django (http://docs.djangoproject.com/en/dev/topics/signals/), pero por lo que yo entiendo, las señales nunca se convierten en activadores de SQL literales (http://en.wikipedia.org/wiki/Database_trigger).django-signals vs triggers?
Si tengo la certeza de que las señales y los factores desencadenantes son diferentes, ¿cuál es mejor y de qué manera? ¿Cuál es la mejor práctica?
....................
Aquí está un ejemplo concreto si quieres uno:
class Location(models.Model):
name = models.CharField(max_length=30)
class Person(models.Model):
location = models.ForeignKey('Location')
class Team(models.Model):
locations = models.ManyToManyField('Location')
quiero que una persona sea capaz de unirse a un equipo si y solo si la ubicación de esa persona está dentro del conjunto de ubicaciones de ese equipo. No sé cómo hacer eso con las restricciones relacionales normales, por lo que sé que estoy obligado a usar disparadores o señales. Mi instinto me dice que debería usar disparadores, pero quiero conocer las mejores prácticas.
+1: Eso y un simple anulación de 'save' en el modelo cubre todas las bases que me he encontrado. –
+1. Las señales generalmente reducen la velocidad de tus pruebas si estás cargando dispositivos que disparan señales. Es difícil trabajar desconectando antes las pruebas y luego conectando. –
Tengo dos objetivos: 1) hacer que el sitio haga lo que quiero (validar) 2) atraparme cuando * I * cometer un error. En términos del n. ° 1, esta sugerencia tiene sentido. En términos del n. ° 2, ¿qué ocurre si no utilizo un ModelForm para interactuar con el DB? la documentación dice "Tenga en cuenta que los validadores no se ejecutarán automáticamente cuando guarde un modelo". Eso significa que ahora puedo perder accidentalmente la integridad de los datos ya que no invoqué un validador al llamar 'Person.save()' antes de modificar el DB. Pero con desencadenadores, es imposible eludir erróneamente el desencadenador. ¿Tiene sentido mi razonamiento? –