[英]Make (& test) 2 fields unique in Django Model
我有一個模型 UserSite。 每個用戶可以有多個站點。 我現在必須讓它們獨一無二。 因此,如果站點已被指定給該用戶,則該站點不能添加到該用戶。 我的模型代碼是:
class UserSite(models.Model):
user = models.ForeignKey(User, on_delete=models.CASCADE, related_name="sites")
site = models.ForeignKey(Site, on_delete=models.CASCADE, related_name="users")
class Meta:
unique_together = ("user", "site")
一切都很好。 現在我想創建一個測試類來測試這是否有效。 我的測試班:
從 rest_framework.test 導入 APITestCase
from models import UserSite
from factories import SiteFactory
from factories import UserFactory
class TestUniqueUserSite(APITestCase):
def setUp(self):
self.user = UserFactory()
self.test_site = SiteFactory()
self.test_site_2 = SiteFactory()
self.user_site = UserSite.objects.create(user=self.user, site=self.test_site)
def test_user_site_is_unique(self):
"""
Check if a new UserSite is unique
"""
self.user_site1 = UserSite.objects.create(user=self.user, site=self.test_site)
工廠:
class UserSiteFactory(factory.django.DjangoModelFactory):
class Meta:
model = UserSite
# Type hinting
def __new__(cls, *args, **kwargs) -> "UserSiteFactory.Meta.model":
return super().__new__(*args, **kwargs) # pragma: no cover
site = factory.SubFactory(SiteFactory)
user = factory.SubFactory(UserFactory)
user_role = factory.fuzzy.FuzzyChoice(UserSite.USER_ROLE_CHOICES)
這個測試沒有錯誤,可以創建 UserSite。 我怎么了? 測試還是獨特的領域? 或者兩者都呵呵,謝謝!
當我運行時:
UserSite.objects.filter(user=self.user, site=self.test_site).all()
我有:
<QuerySet [<UserSite: pk: 1 - user_pk: 1 - site_pk: 1>, <UserSite: pk: 2 - user_pk: 1 - site_pk: 1>]>
所以他們被存儲..
我的猜測是 unique_constraint 應該是一個列表,而不是一個元組。
您沒有正確設置約束,應該像
class UserSite(models.Model):
user = models.ForeignKey(User, on_delete=models.CASCADE, related_name="sites")
site = models.ForeignKey(Site, on_delete=models.CASCADE, related_name="users")
class Meta:
unique_together = (("user", "site"),)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.