[英]How to combine a QuerySet and a Dictionary in Django Template?
[英]Django combine 2 Dictionary/Queryset that have same value
我有以下两个模型查询集,我想将它们组合起来,具有相同的价值,请问您对此有何建议??,任何帮助将不胜感激。 我已经尝试过这个,但与我想要的不一样
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'))
试试这个方法
list1 = [{'id': "1", "name": "xoxo"}, {'id': "2", "name": "yoyo"}]
list2 = [{'id': "1", "age": "11"}, {'id': "2", "age": "12"}]
list3 = []
for index,value in enumerate(list1):
z = list1[index].copy()
z.update(list2[index])
list3.append(z)
print(list3)
输出
[{'id': '1', 'name': 'xoxo', 'age': '11'}, {'id': '2', 'name': 'yoyo', 'age': '12'}]
使用 SQL 的 UNION 运算符来组合两个或多个 QuerySet 的结果。
尝试这个
q1 = Model1.objects.all()
q2 = Model2.objects.all()
q3 = q1.union(q2)
参考这个
希望能帮助到你
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.