我使用Factory Boy爲我的Django應用程序創建測試工廠。我有一個問題,該模型是一個非常基本的Account模型具有OneToOne關係到Django的用戶驗證模型(使用Django < 1.5):Django工廠男孩工廠與OneToOne的關係和相關領域
# models.py
from django.contrib.auth.models import User
from django.db import models
class Account(models.Model):
user = models.OneToOneField(User)
currency = models.CharField(max_length=3, default='USD')
balance = models.CharField(max_length="5", default='0.00')
這裏是我的工廠:
# factories.py
from django.db.models.signals import post_save
from django.contrib.auth.models import User
import factory
from models import Account
class AccountFactory(factory.django.DjangoModelFactory):
FACTORY_FOR = Account
user = factory.SubFactory('app.factories.UserFactory')
currency = 'USD'
balance = '50.00'
class UserFactory(factory.django.DjangoModelFactory):
FACTORY_FOR = User
username = 'bob'
account = factory.RelatedFactory(AccountFactory)
所以我期待在工廠的男孩創建相關UserFactory每當AccountFactory被調用:
# tests.py
from django.test import TestCase
from factories import AccountFactory
class AccountTest(TestCase):
def setUp(self):
self.factory = AccountFactory()
def test_factory_boy(self):
print self.factory.id
然而,當運行測試,它看起來像多用戶模型正在創建和我看到的integriy錯誤:
IntegrityError: column username is not unique
的文件確實提到密切關注着圓形進口打交道時的循環,但我不知道這是否是怎麼回事,也不是我會怎樣補救它。 docs
如果任何熟悉Factory Boy的人都可以參與或提供一些有關可能導致此完整性錯誤的信息,那將非常感謝!
僅供參考,錯誤發生,即使沒有'post_save'信號。 – alecxe
您的權利,我已編輯相應的代碼示例 – darko