Overriding _create classmethod

26 views
Skip to first unread message

Rahul Sarma

unread,
Jun 17, 2017, 12:56:03 AM6/17/17
to Factory Boy
Hi, 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?

Rahul Sarma

unread,
Jun 17, 2017, 4:54:18 AM6/17/17
to Factory Boy
Got it. 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

Rahul Sarma

unread,
Jun 17, 2017, 4:56:15 AM6/17/17
to Factory Boy
Edit (remove newline between classmethod and function def):

   
    @classmethod
   
def _create(cls, model_class, *args, **kwargs):

        obj
= model_class.create_new(first_name=f"Disease{uuid.uuid4()}")
       
return obj


Reply all
Reply to author
Forward
0 new messages