Skip to content

turn_off_auto_add() caused Model.objects.create() error #109

@jxf1002

Description

@jxf1002

This is my test case. After seeder.excute() some models, I cannot create this model instance without set created_at field, because turn_off_auto_add update filed attr but not recovery.

class MyModel(models.Model):
    name = models.CharField(max_length=255)
    created_at = models.DateTimeField(auto_now=False, auto_now_add=True)


class MyTest(TestCase):

    def test(self):
        faker = fake
        seeder = Seeder(faker)
        MyModel.objects.create(name='1')  # no error
        seeder.add_entity(MyModel, 1)
        MyModel.objects.create(name='2')  # no error
        seeder.execute()
        # error: django.db.utils.IntegrityError: NOT NULL constraint failed: django_seed_mymodel.created_at
        MyModel.objects.create(name='3')

code in ModelSeeker

        def turn_off_auto_add(model):
            for field in model._meta.fields:
                if getattr(field, "auto_now", False):
                    field.auto_now = False
                if getattr(field, "auto_now_add", False):
                    field.auto_now_add = False

        manager = self.model.objects.db_manager(using=using)
        turn_off_auto_add(manager.model) # only turn off but not recovery

        faker_data = {
            field: format_field(field_format, inserted_entities)
            for field, field_format in self.field_formatters.items()
        }

        # max length restriction check
        for data_field in faker_data:
            field = self.model._meta.get_field(data_field)

            if field.max_length and isinstance(faker_data[data_field], str):
                faker_data[data_field] = faker_data[data_field][:field.max_length]

        obj = manager.create(**faker_data)

        for field, list in self.many_relations.items():
            list = list(inserted_entities)
            if list:
                for related_obj in list:
                    getattr(obj, field).add(related_obj)

        return obj.pk

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions