Django Rest Framework IntegrityError尝试一起使用unique_时

Django Rest Framework IntegrityError尝试一起使用unique_时,django,django-rest-framework,Django,Django Rest Framework,这似乎与我的目标相似,但我犯了一个错误 IntegrityError column username_id is not unique 我要寻找的是,只有在一起时,这些领域才是独一无二的。这意味着相同的roomId和用户名在一起时只能在数据库中看到一次。但是,可以看到一个用户与另一个roomId在一起。关键是要避免同一用户和同一roomId多次提交当我尝试向另一个roomId提交另一个具有相同用户名的请求时,会出现上述错误 这是我的模型 class Active(models.Model):

这似乎与我的目标相似,但我犯了一个错误

IntegrityError column username_id is not unique
我要寻找的是,只有在一起时,这些领域才是独一无二的。这意味着相同的
roomId
和用户名在一起时只能在数据库中看到一次。
但是,可以看到一个用户与另一个
roomId
在一起。关键是要避免同一用户和同一
roomId
多次提交
当我尝试向另一个
roomId
提交另一个具有相同用户名的请求时,会出现上述错误

这是我的模型

class Active(models.Model):
    username = models.ForeignKey(Profile)
    roomId = models.ForeignKey(Room)
    activeId = models.UUIDField(primary_key=True, default=uuid.uuid4,
                            editable=False)
    class Meta:
        unique_together=(('username', 'roomId',))
我使用的是
SQLite

我以为是“唯一的”约束做到了这一点,但似乎不是这样。正确的方法是什么

编辑

最后我覆盖了perform_create,并在像这样保存之前验证没有一行同时包含这两个键

看起来很好用


问候

对不起,已经得到答复:


您正在寻找的可能已经由多对多关系提供。您可以在用户或文件室上使用该关系吗?

您必须在视图集或正在使用的序列化程序上重写create方法。:)你能解释一下为什么采用这种方法,以及将unique_作为一个答案的目的是什么吗?你有一些信号设置吗?我没有。看看编辑,我想我可以。我最终覆盖了视图上的perfrom_create(self,serializer)。执行以对其进行筛选并检查其是否存在。当DB变大时,我真的很想知道这个方法的性能。这会对性能产生影响,但我想说它可以忽略不计——它只发生在对象创建时。另一种方法是编写自定义对象管理器,在其中覆盖create方法。通过这种方式,您可以在尽可能靠近dB层的地方强化条件,从而使这样的验证也可用于管理站点。
def perform_create(self, serializer):
    queryset = Active.objects.filter(username=serializer.data.get('username')).filter(roomId=serializer.data.get('roomId'))
    if queryset.exists():
        raise ValidationError({"detail" : "dont be silly"})
    serializer.save()