def test_extract_manytomany_values(data_fixture): row_handler = RowHandler() class TemporaryModel1(models.Model): class Meta: app_label = 'test' class TemporaryModel2(models.Model): field_1 = models.CharField() field_2 = models.ManyToManyField(TemporaryModel1) class Meta: app_label = 'test' values = { 'field_1': 'Value 1', 'field_2': ['Value 2'] } values, manytomany_values = row_handler.extract_manytomany_values( values, TemporaryModel2 ) assert len(values.keys()) == 1 assert 'field_1' in values assert len(manytomany_values.keys()) == 1 assert 'field_2' in manytomany_values
def handle(self, *args, **options): table_id = options["table_id"] limit = options["limit"] fake = Faker() row_handler = RowHandler() cache = {} try: table = Table.objects.get(pk=table_id) except Table.DoesNotExist: self.stdout.write( self.style.ERROR(f"The table with id {table_id} was not " f"found.")) sys.exit(1) if "add_columns" in options and options["add_columns"]: self.create_a_column_for_every_type(table) model = table.get_model() # Find out what the highest order is because we want to append the new rows. order = ceil( model.objects.aggregate(max=Max("order")).get("max") or Decimal("0")) for i in range(0, limit): # Based on the random_value function we have for each type we can # build a dict with a random value for each field. values = { f"field_{field_id}": field_object["type"].random_value(field_object["field"], fake, cache) for field_id, field_object in model._field_objects.items() } values, manytomany_values = row_handler.extract_manytomany_values( values, model) order += Decimal("1") values["order"] = order # Insert the row with the randomly created values. instance = model.objects.create(**values) # Changes the set of the manytomany values. for field_name, value in manytomany_values.items(): if value and len(value) > 0: getattr(instance, field_name).set(value) self.stdout.write( self.style.SUCCESS(f"{limit} rows have been inserted."))
def handle(self, *args, **options): table_id = options['table_id'] limit = options['limit'] fake = Faker() row_handler = RowHandler() cache = {} try: table = Table.objects.get(pk=table_id) except Table.DoesNotExist: self.stdout.write( self.style.ERROR(f"The table with id {table_id} was not " f"found.")) sys.exit(1) model = table.get_model() for i in range(0, limit): # Based on the random_value function we have for each type we can # build a dict with a random value for each field. values = { f'field_{field_id}': field_object['type'].random_value(field_object['field'], fake, cache) for field_id, field_object in model._field_objects.items() } values, manytomany_values = row_handler.extract_manytomany_values( values, model) # Insert the row with the randomly created values. instance = model.objects.create(**values) # Changes the set of the manytomany values. for field_name, value in manytomany_values.items(): if value and len(value) > 0: getattr(instance, field_name).set(value) self.stdout.write( self.style.SUCCESS(f"{limit} rows have been inserted."))
def test_extract_manytomany_values(data_fixture): row_handler = RowHandler() class TemporaryModel1(models.Model): class Meta: app_label = "test" class TemporaryModel2(models.Model): field_1 = models.CharField() field_2 = models.ManyToManyField(TemporaryModel1) class Meta: app_label = "test" values = {"field_1": "Value 1", "field_2": ["Value 2"]} values, manytomany_values = row_handler.extract_manytomany_values( values, TemporaryModel2) assert len(values.keys()) == 1 assert "field_1" in values assert len(manytomany_values.keys()) == 1 assert "field_2" in manytomany_values