Rahul Sarma
Rahul Sarma

Reputation: 427

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?

Upvotes: 1

Views: 388

Answers (1)

Rahul Sarma
Rahul Sarma

Reputation: 427

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

Upvotes: 1

Related Questions