這question似乎是類似於我的目標了,但我得到一個錯誤Django的REST框架IntegrityError試圖在使用時unique_together
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()
似乎工作正常。
問候
您將不得不重寫您正在使用的視圖集或序列化程序中的create方法。 :) – debuggerpk
你能否解釋爲什麼採取這種方法,以及unique_together作爲答案的目的是什麼? – Clocker
你有沒有建立一些信號? – Roba