我有以下两个模型查询集,我想结合具有相同的价值,请您对此有您的建议??,任何帮助都将不胜感激。 我已经试过了,但和我想要的不一样
class BuildingCell(models.Model):
...
class InputCutSew(models.Model):
cell = models.ForeignKey(BuildingCell, blank=True, null=True, on_delete=models.SET_NULL)
class Absent(models.Model):
cell = models.ForeignKey(BuildingCell, blank=True, null=True, on_delete=models.SET_NULL)
#this is my queryset
q1= InputCutSew.objects.filter(publish='2019-07-22', days='normal', user=factory_user_cutting).exclude(cell_name__isnull=True).exclude(
cell_name__exact='').order_by('cell').values('cell', 'model').annotate(
total_output_jam=Sum(Case(When(dummy_days='normal', then='output'))),
total_output_ot=Sum(Case(When(dummy_days='overtime', then='output'))),
total_time=Sum('time'),
total_time_ot=Sum('time_ot'),
total_time_ot1=Sum('time_ot1'),
total_time_ot2=Sum('time_ot2'),
total_time_ot3=Sum('time_ot3'))
q2 = Absent.objects.filter(publish='2019-07-22', building_name='f2', bagian='CUT').values('cell', 'normal_mp', 'ot0_mp', 'ot1_mp', 'ot2_mp', 'ot3_mp').exclude(cell__occult_cell='yes')
#dictionary from my query set
q1 = [
{'cell': 633, 'model': 'superstar', 'total_output_jam': 240, 'total_output_ot': 90, 'total_time': Decimal('7.920'), 'total_time_ot': Decimal('0.990'), 'total_time_ot1': Decimal('0.990'), 'total_time_ot2': Decimal('0.990'), 'total_time_ot3': None},
{'cell': 634, 'model': 'superstar', 'total_output_jam': 240, 'total_output_ot': 90, 'total_time': Decimal('7.920'), 'total_time_ot': Decimal('0.990'), 'total_time_ot1': Decimal('0.990'), 'total_time_ot2': Decimal('0.990'), 'total_time_ot3': None},
{'cell': 635, 'model': 'superstar', 'total_output_jam': 240, 'total_output_ot': 90, 'total_time': Decimal('7.920'), 'total_time_ot': Decimal('0.990'), 'total_time_ot1': Decimal('0.990'), 'total_time_ot2': Decimal('0.990'), 'total_time_ot3': None},
{'cell': 636, 'model': 'superstar', 'total_output_jam': 240, 'total_output_ot': 90, 'total_time': Decimal('7.920'), 'total_time_ot': Decimal('0.990'), 'total_time_ot1': Decimal('0.990'), 'total_time_ot2': Decimal('0.990'), 'total_time_ot3': None},
{'cell': 637, 'model': 'superstar', 'total_output_jam': 240, 'total_output_ot': 90, 'total_time': Decimal('7.920'), 'total_time_ot': Decimal('0.990'), 'total_time_ot1': Decimal('0.990'), 'total_time_ot2': Decimal('0.990'), 'total_time_ot3': None},
{'cell': 638, 'model': 'superstar', 'total_output_jam': 240, 'total_output_ot': 90, 'total_time': Decimal('7.920'), 'total_time_ot': Decimal('0.990'), 'total_time_ot1': Decimal('0.990'), 'total_time_ot2': Decimal('0.990'), 'total_time_ot3': None},
{'cell': 639, 'model': 'superstar', 'total_output_jam': 240, 'total_output_ot': 90, 'total_time': Decimal('7.920'), 'total_time_ot': Decimal('0.990'), 'total_time_ot1': Decimal('0.990'), 'total_time_ot2': Decimal('0.990'), 'total_time_ot3': None},
{'cell': 640, 'model': 'superstar', 'total_output_jam': 240, 'total_output_ot': 90, 'total_time': Decimal('7.920'), 'total_time_ot': Decimal('0.990'), 'total_time_ot1': Decimal('0.990'), 'total_time_ot2': Decimal('0.990'), 'total_time_ot3': None},
{'cell': 641, 'model': 'superstar', 'total_output_jam': 240, 'total_output_ot': 90, 'total_time': Decimal('7.920'), 'total_time_ot': Decimal('0.990'), 'total_time_ot1': Decimal('0.990'), 'total_time_ot2': Decimal('0.990'), 'total_time_ot3': None},
{'cell': 642, 'model': 'superstar', 'total_output_jam': 240, 'total_output_ot': 90, 'total_time': Decimal('7.920'), 'total_time_ot': Decimal('0.990'), 'total_time_ot1': Decimal('0.990'), 'total_time_ot2': Decimal('0.990'), 'total_time_ot3': None},
{'cell': 644, 'model': 'superstar', 'total_output_jam': 240, 'total_output_ot': 90, 'total_time': Decimal('7.920'), 'total_time_ot': Decimal('0.990'), 'total_time_ot1': Decimal('0.990'), 'total_time_ot2': Decimal('0.990'), 'total_time_ot3': None},
{'cell': 645, 'model': 'superstar', 'total_output_jam': 240, 'total_output_ot': 90, 'total_time': Decimal('7.920'), 'total_time_ot': Decimal('0.990'), 'total_time_ot1': Decimal('0.990'), 'total_time_ot2': Decimal('0.990'), 'total_time_ot3': None}
]
q2 = [
{'cell': 633, 'normal_mp': Decimal('30.000'), 'ot0_mp': Decimal('30.000'), 'ot1_mp': Decimal('30.000'), 'ot2_mp': Decimal('30.000'), 'ot3_mp': None},
{'cell': 634, 'normal_mp': Decimal('30.000'), 'ot0_mp': Decimal('30.000'), 'ot1_mp': Decimal('30.000'), 'ot2_mp': Decimal('30.000'), 'ot3_mp': None},
{'cell': 635, 'normal_mp': Decimal('30.000'), 'ot0_mp': Decimal('30.000'), 'ot1_mp': Decimal('30.000'), 'ot2_mp': Decimal('30.000'), 'ot3_mp': None},
{'cell': 636, 'normal_mp': Decimal('30.000'), 'ot0_mp': Decimal('30.000'), 'ot1_mp': Decimal('30.000'), 'ot2_mp': Decimal('30.000'), 'ot3_mp': None},
{'cell': 637, 'normal_mp': Decimal('30.000'), 'ot0_mp': Decimal('30.000'), 'ot1_mp': Decimal('30.000'), 'ot2_mp': Decimal('30.000'), 'ot3_mp': None},
{'cell': 638, 'normal_mp': Decimal('30.000'), 'ot0_mp': Decimal('30.000'), 'ot1_mp': Decimal('30.000'), 'ot2_mp': Decimal('30.000'), 'ot3_mp': None},
{'cell': 639, 'normal_mp': Decimal('30.000'), 'ot0_mp': Decimal('30.000'), 'ot1_mp': Decimal('30.000'), 'ot2_mp': Decimal('30.000'), 'ot3_mp': None},
{'cell': 640, 'normal_mp': Decimal('30.000'), 'ot0_mp': Decimal('30.000'), 'ot1_mp': Decimal('30.000'), 'ot2_mp': Decimal('30.000'), 'ot3_mp': None},
{'cell': 641, 'normal_mp': Decimal('30.000'), 'ot0_mp': Decimal('30.000'), 'ot1_mp': Decimal('30.000'), 'ot2_mp': Decimal('30.000'), 'ot3_mp': None},
{'cell': 642, 'normal_mp': Decimal('30.000'), 'ot0_mp': Decimal('30.000'), 'ot1_mp': Decimal('30.000'), 'ot2_mp': Decimal('30.000'), 'ot3_mp': None},
{'cell': 644, 'normal_mp': Decimal('30.000'), 'ot0_mp': Decimal('30.000'), 'ot1_mp': Decimal('30.000'), 'ot2_mp': Decimal('30.000'), 'ot3_mp': None},
{'cell': 645, 'normal_mp': Decimal('30.000'), 'ot0_mp': Decimal('30.000'), 'ot1_mp': Decimal('30.000'), 'ot2_mp': Decimal('30.000'), 'ot3_mp': None}
]
the result what i want
after = [
{'cell': 633, 'model': 'superstar', 'total_output_jam': 240, 'total_output_ot': 90, 'total_time': Decimal('7.920'), 'total_time_ot': Decimal('0.990'), 'total_time_ot1': Decimal('0.990'), 'total_time_ot2': Decimal('0.990'), 'total_time_ot3': None, 'normal_mp': Decimal('30.000'), 'ot0_mp': Decimal('30.000'), 'ot1_mp': Decimal('30.000'), 'ot2_mp': Decimal('30.000'), 'ot3_mp': None},
{'cell': 634, 'model': 'superstar', 'total_output_jam': 240, 'total_output_ot': 90, 'total_time': Decimal('7.920'), 'total_time_ot': Decimal('0.990'), 'total_time_ot1': Decimal('0.990'), 'total_time_ot2': Decimal('0.990'), 'total_time_ot3': None, 'normal_mp': Decimal('30.000'), 'ot0_mp': Decimal('30.000'), 'ot1_mp': Decimal('30.000'), 'ot2_mp': Decimal('30.000'), 'ot3_mp': None},
{'cell': 635, 'model': 'superstar', 'total_output_jam': 240, 'total_output_ot': 90, 'total_time': Decimal('7.920'), 'total_time_ot': Decimal('0.990'), 'total_time_ot1': Decimal('0.990'), 'total_time_ot2': Decimal('0.990'), 'total_time_ot3': None, 'normal_mp': Decimal('30.000'), 'ot0_mp': Decimal('30.000'), 'ot1_mp': Decimal('30.000'), 'ot2_mp': Decimal('30.000'), 'ot3_mp': None},
{'cell': 636, 'model': 'superstar', 'total_output_jam': 240, 'total_output_ot': 90, 'total_time': Decimal('7.920'), 'total_time_ot': Decimal('0.990'), 'total_time_ot1': Decimal('0.990'), 'total_time_ot2': Decimal('0.990'), 'total_time_ot3': None, 'normal_mp': Decimal('30.000'), 'ot0_mp': Decimal('30.000'), 'ot1_mp': Decimal('30.000'), 'ot2_mp': Decimal('30.000'), 'ot3_mp': None},
{'cell': 637, 'model': 'superstar', 'total_output_jam': 240, 'total_output_ot': 90, 'total_time': Decimal('7.920'), 'total_time_ot': Decimal('0.990'), 'total_time_ot1': Decimal('0.990'), 'total_time_ot2': Decimal('0.990'), 'total_time_ot3': None, 'normal_mp': Decimal('30.000'), 'ot0_mp': Decimal('30.000'), 'ot1_mp': Decimal('30.000'), 'ot2_mp': Decimal('30.000'), 'ot3_mp': None},
{'cell': 638, 'model': 'superstar', 'total_output_jam': 240, 'total_output_ot': 90, 'total_time': Decimal('7.920'), 'total_time_ot': Decimal('0.990'), 'total_time_ot1': Decimal('0.990'), 'total_time_ot2': Decimal('0.990'), 'total_time_ot3': None, 'normal_mp': Decimal('30.000'), 'ot0_mp': Decimal('30.000'), 'ot1_mp': Decimal('30.000'), 'ot2_mp': Decimal('30.000'), 'ot3_mp': None},
{'cell': 639, 'model': 'superstar', 'total_output_jam': 240, 'total_output_ot': 90, 'total_time': Decimal('7.920'), 'total_time_ot': Decimal('0.990'), 'total_time_ot1': Decimal('0.990'), 'total_time_ot2': Decimal('0.990'), 'total_time_ot3': None, 'normal_mp': Decimal('30.000'), 'ot0_mp': Decimal('30.000'), 'ot1_mp': Decimal('30.000'), 'ot2_mp': Decimal('30.000'), 'ot3_mp': None},
{'cell': 640, 'model': 'superstar', 'total_output_jam': 240, 'total_output_ot': 90, 'total_time': Decimal('7.920'), 'total_time_ot': Decimal('0.990'), 'total_time_ot1': Decimal('0.990'), 'total_time_ot2': Decimal('0.990'), 'total_time_ot3': None, 'normal_mp': Decimal('30.000'), 'ot0_mp': Decimal('30.000'), 'ot1_mp': Decimal('30.000'), 'ot2_mp': Decimal('30.000'), 'ot3_mp': None},
{'cell': 641, 'model': 'superstar', 'total_output_jam': 240, 'total_output_ot': 90, 'total_time': Decimal('7.920'), 'total_time_ot': Decimal('0.990'), 'total_time_ot1': Decimal('0.990'), 'total_time_ot2': Decimal('0.990'), 'total_time_ot3': None, 'normal_mp': Decimal('30.000'), 'ot0_mp': Decimal('30.000'), 'ot1_mp': Decimal('30.000'), 'ot2_mp': Decimal('30.000'), 'ot3_mp': None},
{'cell': 642, 'model': 'superstar', 'total_output_jam': 240, 'total_output_ot': 90, 'total_time': Decimal('7.920'), 'total_time_ot': Decimal('0.990'), 'total_time_ot1': Decimal('0.990'), 'total_time_ot2': Decimal('0.990'), 'total_time_ot3': None, 'normal_mp': Decimal('30.000'), 'ot0_mp': Decimal('30.000'), 'ot1_mp': Decimal('30.000'), 'ot2_mp': Decimal('30.000'), 'ot3_mp': None},
{'cell': 644, 'model': 'superstar', 'total_output_jam': 240, 'total_output_ot': 90, 'total_time': Decimal('7.920'), 'total_time_ot': Decimal('0.990'), 'total_time_ot1': Decimal('0.990'), 'total_time_ot2': Decimal('0.990'), 'total_time_ot3': None, 'normal_mp': Decimal('30.000'), 'ot0_mp': Decimal('30.000'), 'ot1_mp': Decimal('30.000'), 'ot2_mp': Decimal('30.000'), 'ot3_mp': None},
{'cell': 645, 'model': 'superstar', 'total_output_jam': 240, 'total_output_ot': 90, 'total_time': Decimal('7.920'), 'total_time_ot': Decimal('0.990'), 'total_time_ot1': Decimal('0.990'), 'total_time_ot2': Decimal('0.990'), 'total_time_ot3': None, 'normal_mp': Decimal('30.000'), 'ot0_mp': Decimal('30.000'), 'ot1_mp': Decimal('30.000'), 'ot2_mp': Decimal('30.000'), 'ot3_mp': None}
]
我通过注释BuildingCell查询集得到想要的结果
q3 = BuildingCell.objects.filter(absent__publish='2019-07-22', absent__building_name='f2', absent__bagian='CUT', inputcutsew__publish='2019-07-22', inputcutsew__days='normal', inputcutsew__user=factory_user_cutting).exclude(inputcutsew__cell_name__isnull=True).exclude(
inputcutsew__cell_name__exact='').order_by('inputcutsew__cell').values('inputcutsew__cell', 'inputcutsew__model', 'absent__cell', 'absent__normal_mp', 'absent__ot0_mp', 'absent__ot1_mp', 'absent__ot2_mp', 'absent__ot3_mp').exclude(occult_cell='yes').annotate(
total_output_jam=Sum(Case(When(inputcutsew__dummy_days='normal', then='inputcutsew__output'))),
total_output_ot=Sum(Case(When(inputcutsew__dummy_days='overtime', then='inputcutsew__output'))),
total_time=Sum('inputcutsew__time'),
total_time_ot=Sum('inputcutsew__time_ot'),
total_time_ot1=Sum('inputcutsew__time_ot1'),
total_time_ot2=Sum('inputcutsew__time_ot2'),
total_time_ot3=Sum('inputcutsew__time_ot3'))
这样试试
输出
使用SQL的UNION运算符组合两个或多个查询集的结果。你知道吗
试试这个
参考this
希望有帮助
相关问题 更多 >
编程相关推荐