передача генератора в field_values ​​в django-autofixture - PullRequest
0 голосов
/ 12 декабря 2011

Обращаясь к документации 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, который генерирует значение на лету, или функцией вызова, которая не принимает аргументов и возвращает требуемое значение.

Что я делаю неправильно?

Ответы [ 2 ]

1 голос
/ 12 декабря 2011

Хорошо, 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 голосов
/ 24 марта 2015

В случае, когда вам просто нужны необработанные данные, вы можете использовать:
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 .........))))))))))))'

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...