Ich benutze Factory Boy, um Testfabriken für meine Django-App zu erstellen. Das Modell, das ich mit einem Problem habe ist ein sehr einfaches Konto-Modell, das einen OneToOne Bezug auf das django Benutzer-Auth-Modell hat (mit django < 1.5):Django Fabrik Junge Fabrik mit OneToOne Beziehung und verwandtes Feld
# 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')
Hier meine Fabriken sind:
# 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)
erwarten Also ich bin der Fabrik Junge, der einen Zusammenhang Userfactory zu erstellen, wenn AccountFactory aufgerufen wird:
# 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
Wenn jedoch der Test ausgeführt wird, sieht es aus wie mehrere Benutzer Modelle werden erstellen, und ich einen integriy Fehler sehe:
IntegrityError: column username is not unique
Die Dokumentation für Schleifen Ausschau nicht erwähnt, wenn sie mit Kreis Importen zu tun, aber ich bin nicht sicher, ob das ist, was los ist, noch, wie ich Abhilfe schaffen. docs
Wenn jemand, der mit Factory Boy vertraut ist, einläuten könnte oder einen Einblick geben könnte, was diesen Integritätsfehler verursachen könnte, würde er sehr geschätzt werden!
FYI, passiert der Fehler, auch wenn kein 'post_save' Signal ist. – alecxe
Ihr Recht, ich habe die Codebeispiele entsprechend bearbeitet – darko