Como validar a restrição de exclusividade na chave estrangeira (django)
Eu tenho a seguinte estrutura de dados (simplificada):
Site
-> Zone
-> Room
-> name
Eu quero que o nome de cada sala seja único para cada site.
Eu sei que se eu quisesse exclusividade para cada Zona, eu poderia fazer:
class Room(models.Model):
zone = models.ForeignKey(Zone)
name = models.CharField(max_length=255)
class Meta:
unique_together = ('name', 'zone')
Mas eu não posso fazer o que eu realmente quero, que é:
class Room(models.Model):
zone = models.ForeignKey(Zone)
name = models.CharField(max_length=255)
class Meta:
unique_together = ('name', 'zone__site')
Eu tentei adicionar um método validate_unique, como sugerido poressa questão:
class Room(models.Model):
zone = models.ForeignKey(Zone)
name = models.CharField(max_length=255)
def validate_unique(self, exclude=None):
qs = Room.objects.filter(name=self.name)
if qs.filter(zone__site=self.zone__site).exists():
raise ValidationError('Name must be unique per site')
models.Model.validate_unique(self, exclude=exclude)
mas devo estar entendendo mal o ponto / implementação de validate_unique, porque ele não está sendo chamado quando eu salvo um objeto Room.
Qual seria a maneira correta de implementar essa verificação?