gpt4 book ai didi

python - Django FactoryBoy : fill modelfield with choices throws error

转载 作者:太空宇宙 更新时间:2023-11-04 02:30:20 26 4
gpt4 key购买 nike

我正在一家模型工厂工作,我正在尝试填写一个包含选项列表的字段。当我试图用工厂创建一个对象时,我试图从选择列表中随机填充一个选择,抛出一个异常:

TypeError: 'choice' is an invalid keyword argument for this function

Traceback (most recent call last):
File "<console>", line 1, in <module>
File "/usr/local/lib/python2.7/dist-packages/factory/base.py", line 551, in build
return cls._generate(enums.BUILD_STRATEGY, kwargs)
File "/usr/local/lib/python2.7/dist-packages/factory/base.py", line 505, in _generate
return step.build()
File "/usr/local/lib/python2.7/dist-packages/factory/builder.py", line 279, in build
kwargs=kwargs,
File "/usr/local/lib/python2.7/dist-packages/factory/base.py", line 312, in instantiate
return self.factory._build(model, *args, **kwargs)
File "/usr/local/lib/python2.7/dist-packages/factory/base.py", line 531, in _build
return model_class(*args, **kwargs)
File "/usr/local/lib/python2.7/dist-packages/django/db/models/base.py", line 571, in __init__
raise TypeError("'%s' is an invalid keyword argument for this function" % list(kwargs)[0])
TypeError: 'choice' is an invalid keyword argument for this function

使用的版本:

django==1.11
factory-boy==2.9.2
python==2.7.12

(裁剪)模型:

class Server(models.Model):

TEST = 'test'
ACCEPT = 'accept'

SERVER_TYPES = (
(TEST, _("Testing Server")),
(ACCEPT, _("Acceptation Server"))
)

type = models.CharField(_("Server type"), max_length=50, choices=SERVER_TYPES)

(裁剪)工厂:

class ServerFactory(factory.DjangoModelFactory):

type = factory.Faker('random_element', elements=[choice[0] for choice in Server.SERVER_TYPES)

class Meta:
model = Server

我还尝试使用 LazyFunction 而不是使用 Faker('random_element, elements=[..]):

def get_server_type():
choices = [choice[0] for choice in Server.SERVER_TYPES]
return random.choice(choices)

class ServerFactory(factory.DjangoModelFactory):

organization = factory.SubFactory(OrganizationFactory)
type = factory.LazyFunction(get_server_type)

.. Meta ..

这也会引发相同的错误。我也找不到任何真正的其他替代方法来解决这个问题。关于如何在使用 factory 包时使用 SERVER_TYPES 选择之一填充 type 字段的任何建议?

最佳答案

你能试试这个吗?

from random import choice
type = factory.LazyAttribute(lambda x: choice(Server.SERVER_TYPES)[0])

基于问题初始描述的旧评论:

应该是 type = factory.Faker('random_element', elements=[choice[0] for choice in Server.SERVER_TYPES])

关于python - Django FactoryBoy : fill modelfield with choices throws error,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49371682/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com