2011-12-12 16 views
0

参照django-autofixture documentation,我写以下代码(编辑为简洁):传递发电机以field_values在Django-autofixture

def random_state_generator(self, states=None): 
     import random 
     if not states: 
      states = "waiting|email|post|einv".split('|') 
     while 1: 
      yield random.choice(states) 

...

rsg = self.random_state_generator() 
    self.create_test_foo(10, values={'state': rsg}) 

...

field_values = dict(field_values.items() + values.items()) 
    foo_fixture = AutoFixture(FooClass, overwrite_defaults=True, 
           generate_fk=generate_fk_values, 
           field_values=field_values) 
    bunch_of_stuff = foo_fixture.create(foo_count) 

好吧, 现在,当我把数据库全部设置好了,我过滤了自己的东西清单, 去

for foo in bunch_of_stuff: print (foo.state) 

,而不是得到预期的随机状态的字符串,我得到下面的输出:

发电机对象random_state_generator在0x242c640>

这不是我想根据文件预计,具体为

field_values:字段名称为模型的字典作为关键字。值可以是分配给该字段的静态值,即时生成一个值的Generator实例或不带参数并返回所需值的可调用值。

我在做什么错?

回答

1

好的,field_values从autofixture.generators中取得一个类实例,所以我只需要做: 生成状态列表;

from autofixture.generators import ChoicesGenerator 
states = "waiting|email|post|einv".split('|') 
rsg = ChoicesGenerator(values=states) 
self.create_test_foo(10, values={'state': rsg}) 

由于混淆了autofixture的生成器和通用的python生成器,误解有所增加。

0

如果当u只是想一些原始数据,你可以使用:
def create_doctor(): if Doctor.objects.all().count() == 0: import random avail_item = ['Hart', 'Kidney', 'Lungs', 'Ear', 'Bones'] for i in range(10): fixture = AutoFixture(Doctor, field_values={'user_name': 'GauravTyagi', 'speciality': random.choice(avail_item)}) fixture.create(1) else: print 'Doctors exist in table .........))))))))))))'