创建多个带外键的对象

15 投票
4 回答
8715 浏览
提问于 2025-04-17 14:06

我需要创建十个示例用户(User),每个用户都要有五十个文档(Doc)。我该如何在tests.py文件中使用factoryboy来实现这个呢?

#factories.py

from app_name.models import *
import factory
from datetime import datetime, timedelta, time
from django.contrib.auth.models import User


class UserFactory(factory.Factory):
    FACTORY_FOR = User

    username = factory.Sequence(lambda n: 'User ' + n)
    email = 'demo@mail.com'
    password = '1234567'

class DocFactory(factory.Factory):
    FACTORY_FOR = Doc

    user = factory.SubFactory(UserFactory)
    kategories = '1'
    doc_number = '12345678'
    date_join = factory.Sequence(lambda n:(datetime.now() + timedelta(days=n)).date(), int)

在我的tests.py中:

from django.test import TestCase
from django_dynamic_fixture import G
from factories import *

4 个回答

1

你可以简单地使用 batch_create,这样每个 DocFactory 对象都会创建一个新的 UserFactory 对象。

`DocFactory.create_batch(10)`
8

你可以使用一个叫做 post_generation 的装饰器:

class UserFactory(factory.Factory):

    ...

    @factory.post_generation
    def create_docs(self, create, extracted, **kwargs):
        if not create:
            return
        for i in range(50):
            doc = DocFactory.create(user=self)
17

当然可以!请看下面的内容:

在编程中,有时候我们需要让程序做一些特定的事情,比如处理数据或者执行某些操作。为了让程序更聪明,我们会用到一些工具和方法。

有些时候,程序可能会遇到问题,比如出错或者无法完成任务。这时候,我们需要去找出问题的原因,并进行修复。这就像修理一个坏掉的机器一样,我们需要仔细检查每一个部分。

在解决问题的过程中,我们可能会使用一些代码块,这些代码块就像是程序的指令,告诉计算机该做什么。比如说,代码块可能会包含一些条件判断,决定程序在不同情况下该如何反应。

总之,编程就像是在给计算机下指令,让它按照我们的想法去工作。遇到问题时,我们需要耐心地分析和解决,就像解决一个谜题一样。

users = UserFactory.create_batch(10)
for user in users:
    doc = DocFactory.create(user=user)

撰写回答