Django condicional único juntos.

Tengo un modelo que se parece a lo siguiente:

class LibraryEntry(models.Model): host_lib_song_id = models.IntegerField() song = models.CharField(max_length=200) artist = models.CharField(max_length=200) album = models.CharField(max_length=200) owning_user = models.ForeignKey(User) is_deleted = models.BooleanField(default=False) 

Ahora, si selecciono is_deleted=False , la combinación de host_lib_song_id y owning_user debería ser única. ¿Cómo puedo express esto?

Reemplazar validate_unique para verificar la unicidad si is_deleted es False es más apropiado:

 ... def validate_unique(self, exclude=None): if not self.is_deleted and \ LibraryEntry.objects.exclude(pk=self.pk).filter(host_lib_song_id=self.host_lib_song_id, owning_user=self.owning_user).exists(): raise ValidationError('Some error message about uniqueness required') super(LibraryEntry, self).validate_unique(exclude=exclude) 

No puede expressse a través de la restricción Meta.unique_together , sino a través de la validación del modelo de django :

 class LibraryEntry(models.Model): def clean(self): from django.core.exceptions import ValidationError try: # try to find a duplicate entry and exclude 'self' duplicate = LibraryEntry.objects.exclude(pk=self.pk)\ .get(owning_user=self.owning_user, host_lib_song_id=self.host_lib_song_id, is_deleted=False) raise ValidationError('Library Entry already exists!') except: LibraryEntry.DoesNotExist: # no duplicate found pass