방금 장고에서 factory boy을 사용하기 시작했습니다. 그것은 FACTORY_DJANGO_GET_OR_CREATE
이라는 설정을 가지고 있습니다. 즉, 이미 존재하는 경우 새 개체를 만들지 않습니다. 그러나 기존 SubFactory
개체가있는 개체를 요청하면이 설정에도 불구하고 사용되지 않은 개체가 만들어집니다.FactoryBoy가 FACTORY_DJANGO_GET_OR_CREATE에도 불구하고 SubFactory에서 새로운 객체를 만드는 이유
예를 들어, 새로운 프로젝트에, 나는 시도 :
# models.py
from django.db import models
class A(models.Model):
name = models.CharField(max_length=10)
class B(models.Model):
name = models.CharField(max_length=10)
a = models.ForeignKey(A)
그리고 이제
# factories.py
import factory
from . import models
class AFactory(factory.DjangoModelFactory):
FACTORY_FOR = models.A
FACTORY_DJANGO_GET_OR_CREATE = ('name',)
name = factory.Sequence(lambda n: 'A-{0}'.format(n))
class BFactory(factory.DjangoModelFactory):
FACTORY_FOR = models.B
FACTORY_DJANGO_GET_OR_CREATE = ('name',)
name = factory.Sequence(lambda n: 'B-{0}'.format(n))
a = factory.SubFactory(AFactory)
을 :
이from factories import *
a = AFactory(name="Apple")
models.A.objects.all()
# one object
b = BFactory(a__name="Apple", name="Beetle")
models.B.objects.all()
models.A.objects.all()
# one A object, one B object
b = BFactory(name="Beetle")
models.B.objects.all()
models.A.objects.all()
# still one B object, but now a new, unused A object too
그런 BFactory
에 최종 호가 존재로 가져왔다 클래스 A
의 새 객체 인 경우 B
의 name Beetle은 이미 존재하며 다시 생성되지 않습니다. 왜, 그리고 어떻게이 새로운 A 객체가 생성되는 것을 멈추게합니까?
은 (내가 대신 호출하여이 문제를 얻을 수 있습니다 알고
b = BFactory(name="Beetle", a__name="Apple")
하지만 내 실제 사용의 경우, 나는 여러 종속성 및 계층 구조의 수준이, 그리고이 방법을 추가 중복 매개 변수를 제공하는 혼란의
- 매개 변수의 올바른 조합을 얻을 수없는 것 같습니다.)고마워!
감사합니다! A가 사용자이고 B가 게시물이라고 가정 해보십시오. 위의 코드에서 새 게시물을 만들면 항상 새 사용자를 만들고 해당 게시물을 새 사용자와 연결합니다. '공장 소년'을 사용하여 한 사용자에게 여러 게시물을 테스트 할 수 있습니까? –
위와 마찬가지로'FACTORY_DJANGO_GET_OR_CREATE'를 설정하면 내 의견이 불분명하다는 것을 깨달았습니다. 여러 게시물을 가진 한 사용자가 쉽습니다.하지만 실제로 비즈니스를 소유 한 사용자가 있고 비즈니스에서 게시물을 작성합니다 (즉, 세 번째 클래스 C가 있음). 실제로'ForeignKeys'를 가진 다른 객체도있을 수 있습니다 (클래스 D, E ...). 따라서 이러한 다운 스트림 객체 중 하나를 만들 때마다 새로 생성 된 (그리고 사용되지 않은) 객체의 전체 계층 구조가 생성됩니다. 그것이 내가 피하고 싶은 것입니다. –