Search code examples
pythondjangofactory-boy

Overriding _create classmethod


I am using django and have a custom method for creating new objects of a certain model:

class DiseaseFactory(factory.django.DjangoModelFactory):

    class Meta:
        model = models.Disease

    def _create(cls, model_class, *args, **kwargs):
        obj = model_class.create_new(first_name=f"Disease{uuid.uuid4()}")
        return obj

When I try to create an instance of DiseaseFactory using DiseaseFactory.create(), it throws me the error:

TypeError: _create() missing 1 required positional argument: 'model_class'

What am I doing wrong?


Solution

  • In order for this to work, you need to add @classmethod decorator like so:

    class DiseaseFactory(factory.django.DjangoModelFactory):
    
        class Meta:
            model = models.Disease
    
        @classmethod
        def _create(cls, model_class, *args, **kwargs):
            obj = model_class.create_new(first_name=f"Disease{uuid.uuid4()}")
            return obj