Jak sprawdzić ograniczenie unikalności dla klucza obcego (django)
Mam następującą (uproszczoną) strukturę danych:
Site
-> Zone
-> Room
-> name
Chcę, aby nazwa każdego pokoju była unikalna dla każdej witryny.
Wiem, że gdybym tylko chciał wyjątkowości dla każdej Strefy, mógłbym:
class Room(models.Model):
zone = models.ForeignKey(Zone)
name = models.CharField(max_length=255)
class Meta:
unique_together = ('name', 'zone')
Ale nie mogę zrobić tego, czego naprawdę chcę, czyli:
class Room(models.Model):
zone = models.ForeignKey(Zone)
name = models.CharField(max_length=255)
class Meta:
unique_together = ('name', 'zone__site')
Próbowałem dodać metodę validate_unique, jak zasugerowałto pytanie:
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)
ale muszę nie rozumieć punktu / implementacji validate_unique, ponieważ nie jest wywoływany, gdy zapisuję obiekt pokoju.
Jaki byłby właściwy sposób wdrożenia tej kontroli?