Как создать поле в Factory-Boy для TaggableManager из django-taggit?Как создать фабрику Factory-Boy для модели с полем TaggableManager
Следующая не работает:
Первое:
class ExperimentFactory(factory.DjangoModelFactory):
class Meta:
model = Experiment
django_get_or_create = ('owner', 'name', 'start_date', 'stop_date',)
owner = factory.SubFactory(UserFactory)
name = factory.Sequence(lambda n : 'Experiment %s' % n)
start_date = fuzzy.FuzzyDate(start_date=datetime.date(2003, 2, 1),
end_date = datetime.date.today() + timedelta(days=4*52*7+5))
tags = [u'abc, cde', u'xzy']
Ошибка: Ошибка типа: 'метки' является недопустимым аргументом ключевое слово для этой функции
Второе: (с factory.post_generation
) , Таким образом, вместо последней строки есть
@factory.post_generation
def post_tags(self, create, extracted, **kwargs):
self.tags = [u'abc, cde', u'xzy']
# self.save() # This does not have any effects
я получаю в результате по Experiment.objects.get(pk=1).tags
является []
Для некоторых деталей:
Испытание объектов в TestCase
является:
experiment = ExperimentFactory(owner = self.user)
saved_experiment = Experiment.objects.get(name=experiment.name)
self.assertEquals(len(experiment.tags), len(saved_experiment.tags.all())) # AssertError: 2 != 0
self.assertItemsEqual(experiment.tags, saved_experiment.tags.all())
Странно, что в self.experiments
теги устанавливаются. Вызывается метод post_tags()
.
Модель:
class Experiment(models.Model):
owner = models.ForeignKey(User, related_name='experiments')
name = models.CharField(max_length=32, default='')
start_date = models.DateField()
tags = TaggableManager()
Хотя этот фрагмент кода может решить вопрос, [включая объяснение] (http://meta.stackexchange.com/questions/114762/explaining-entirely-code-based-answers) действительно помогает улучшить качество вашего после. Помните, что вы отвечаете на вопрос читателей в будущем, и эти люди могут не знать причин вашего предложения кода. – gunr2171