尝试使用unique_together时,Django Rest Framework IntegrityError

时间:2015-10-10 04:33:02

标签: django django-rest-framework

question似乎与我的目标相似,但是我收到了错误

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和。

我认为unique_together约束做到了这一点,但它看起来并不像。什么是正确的方法?

修改

我最终覆盖了perform_create并确认在保存之前没有任何行包含这两个键,就像在link中一样。

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()

似乎工作正常。

此致

1 个答案:

答案 0 :(得分:0)

抱歉,已经回答:Django Unique Together (with foreign keys)

您正在寻找的内容可能已由多对多关系提供。你可以在用户或房间使用这种关系吗?