Używam Factory Boy do tworzenia fabryk testowych dla mojej aplikacji django. Model Mam problem z to bardzo podstawowy model Account, który ma związek OneToOne do modelu auth Django użytkownika (przy użyciu Django < 1.5):Fabryka fabryki django dla chłopców ze związkiem OneToOne i dziedziną pokrewną
# 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')
Oto moje fabryki:
# 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)
Więc spodziewam chłopca fabryki stworzyć związane UserFactory ilekroć AccountFactory jest wywoływana:
# 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
Po uruchomieniu testu jednak wygląda na to, stwardnienie użytkownika Modele są jako stworzenia, a ja widząc integriy błąd:
IntegrityError: column username is not unique
Dokumentacja wspomina uważając na pętli przy zajmujących się przywozem okrągłymi, ale nie jestem pewien, czy to, co się dzieje, ani jak bym napraw to. docs
Jeśli ktoś znający Factory Boy mógłby zadzwonić lub podać wgląd w to, co może być przyczyną tego błędu integralności, byłby bardzo ceniony!
FYI, błąd zdarza się nawet, jeśli nie ma 'sygnał post_save'. – alecxe
Twoje prawo, ja edytowałem przykłady kodu odpowiednio – darko