这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()
似乎工作正常。
此致
答案 0 :(得分:0)
抱歉,已经回答:Django Unique Together (with foreign keys)
您正在寻找的内容可能已由多对多关系提供。你可以在用户或房间使用这种关系吗?