Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- def handle_parameters_upload(request, file):
- wb = openpyxl.load_workbook(file, read_only=True)
- first_sheet = wb.get_sheet_names()[0]
- ws = wb.get_sheet_by_name(first_sheet)
- recipe, _ = Recipe.objects.get_or_create(par_recipe=ws["B2"].value)
- line, _ = Line.objects.get_or_create(par_machine=ws["C2"].value)
- order, _ = Order.objects.get_or_create(par_fa=ws["D2"].value)
- # Clear existing data
- Measurements.objects.all().delete()
- Parameter.objects.all().delete()
- parameter_data = set()
- duplicate_measurement_parameter = {}
- measurement_data = []
- for row in ws.iter_rows(row_offset=1):
- parameter = (row[5].value, row[6].value, row[7].value,)
- if parameter in parameter_data:
- duplicate_measurement_parameter[row[8].value] = {
- 'par_rollennr': parameter[0],
- 'par_definition_id': parameter[1],
- 'par_name': parameter[2],
- }
- # Add the parameter
- parameter_data.add(parameter)
- # par_rollennr, par_definition_id, par_name, measurement: par_value
- measurement_data.append(row[8].value)
- # Bulk create data
- parameters = Parameter.objects.bulk_create([
- Parameter(
- id_parameter=index,
- par_rollennr=p_data[0],
- par_definition_id=p_data[1],
- par_name=p_data[2],
- ) for index, p_data in enumerate(parameter_data)
- ])
- Measurements.objects.bulk_create([
- Measurements(
- line=line,
- order=order,
- recipe=recipe,
- par_value=m_data,
- parameter=parameter or Parameter.objects.filter(**duplicate_measurement_parameter.get(m_data, {})).first(),
- )
- for parameter, m_data in zip_longest(parameters, measurement_data)
- ])
- return True
- class Parameter (models.Model):
- id_parameter = models.IntegerField(primary_key=True)
- par_rollennr = models.IntegerField(default=0)
- par_definition_id = models.IntegerField(default=0)
- par_name = models.CharField(max_length=200)
- class Measurements (models.Model):
- id_measurement = models.AutoField(primary_key=True)
- par_value = models.IntegerField(default=0)
- line = models.ForeignKey(Line, on_delete=models.CASCADE, null=True)
- order = models.ForeignKey(Order, on_delete=models.CASCADE, null=True)
- recipe = models.ForeignKey(Recipe, on_delete=models.CASCADE, null=True)
- parameter = models.ForeignKey(Parameter, on_delete=models.CASCADE, null=True)
Add Comment
Please, Sign In to add comment