Django条件独特在一起

Kur*_*aum 6 python django model

我有一个如下所示的模型:

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)
Run Code Online (Sandbox Code Playgroud)

现在,如果我这样选择哪里is_deleted=False,组合host_lib_song_idowning_user应该是唯一的.我怎么表达这个?

Chr*_*att 11

重写validate_unique检查独特性,如果is_deletedFalse更合适:

...

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)
Run Code Online (Sandbox Code Playgroud)

  • 唯一不一起产生数据库约束吗?覆盖`validate_unique`会阻止Django运行唯一性检查,但是当您尝试将其保存到db时,会出现完整性错误。 (2认同)