Я явно тупица, я признаю это в самом начале. Я использую следующую фабрику
class DataSheetFactory(factory.DjangoModelFactory):
class Meta:
model = models.myModel
django_get_or_create = ('key_field',)
key_field = factory.Sequence(lambda n: n)
... <additional fields>
@factory.post_generation
def product_contributors(self, create, extracted, **kwargs):
if not create:
return
if extracted:
for person in extracted:
self.product_contributors.add(person)
Когда я создаю это с помощью PDS=DataSheetFactory(product_contributors= (<tuple of users>))
, я ожидаю список пользователей в поле product_contributors
, но вместо этого получаю django.db.models.fields.related.ManyRelatedManager
, поэтому тесты не будут работать. Что я должен был делать, следуя «Общим рецептам» здесь?
Просто чтобы уточнить, я спрашиваю, как использовать factory boy для создания списка пользователей в поле модели «многие ко многим». Я попробовал то, что было предложено в документах, и я получил ManyRelatedManager
, а не список, поэтому factory_boy
создает непригодные для использования экземпляры.
product_contributors
не может быть одновременно и методом, и списком, для которого вы вызываетеadd
. - person Daniel Roseman   schedule 28.10.2014self
здесь на самом деле экземпляр модели Django, а не фабрики. Я обычно называю этот kwargobj
вместоself
в своем коде. - person Anentropic   schedule 28.10.2014ManyRelatedManager
при доступе к полю «многие ко многим» в экземпляре модели Django. если вы хотите, чтобы связанные объекты отображались в виде списка, вам нужно сделатьPDS.product_contributors.all()
(это будет работать, только если вы используете стратегиюcreate
, а неbuild
, поскольку это запрос к базе данных) - person Anentropic   schedule 28.10.2014ManyRelatedManager
- person David Boshton   schedule 28.10.2014.all()
в менеджере. - person Daniel Roseman   schedule 28.10.2014postgeneration
, как указано. Если я хочу добавить группу пользователей в это поле, мне нужно сделать это после создания исходного экземпляра. Итак, как мне заполнить это поле в factory_boy? - person David Boshton   schedule 28.10.2014