Как группировать данные по json-полям в django-mongodb
Здравствуйте, Заранее спасибо...
Я использую Django 3.0.5, Python 3.8.0 и MongoDB 5.0
Мое требование:
Сгруппируйте данные, сопоставив значения полей Ширина, Высота, Толщина и Тип. Во время группировки данных выполните суммирование длины.
Я пробовал этот способ
list(UploadCableTrayData.objects.filter(creator_id__in=selected_users).filter(date_added__range=(selected_start_date, selected_end_date)).values(
'Thickness__value', 'Width__value', 'Height__value', 'Selection').annotate(dcount=Count(['Thickness', 'Width', 'Height']), Length=Sum('Length__value')).order_by("date_updated"))
Но я получаю ошибки следующего вида
NameError: имя 'Thickness__value' не определено
Вот моя модель
class UploadCableTrayData(BaseModel, models.Model):
"""
Model to store Cable Tray data
"""
order_upload_id = models.AutoField(primary_key=True)
Order_number = jsonfield.JSONField(null=True, blank=True)
Type = jsonfield.JSONField(null=True, blank=True)
Selection = jsonfield.JSONField(null=True, blank=True)
Height = jsonfield.JSONField(null=True, blank=True)
Width = jsonfield.JSONField(null=True)
Box_width = jsonfield.JSONField(null=True)
Box_height = jsonfield.JSONField(null=True)
Length = jsonfield.JSONField(null=True)
Inner_bend1 = jsonfield.JSONField(null=True, blank=True)
Inner_bend2 = jsonfield.JSONField(null=True, blank=True)
Thickness = jsonfield.JSONField(null=True, blank=True)
Rung_width = jsonfield.JSONField(null=True, blank=True)
Rung_height = jsonfield.JSONField(null=True, blank=True)
Distance_between_rungs = jsonfield.JSONField(null=True, blank=True)
project = models.ForeignKey('project.Project', on_delete=models.DO_NOTHING)
def __str__(self):
return str(self.order_upload_id)
class Meta:
db_table = 'UploadCableTrayData'
Данные, хранящиеся в модели, выглядят следующим образом
{
"_id": {
"$oid": "62384f772d6545101709083b"
},
"order_upload_id": 4,
"creator_id": 3,
"updater_id": 3,
"date_added": {
"$date": {
"$numberLong": "1647857527370"
}
},
"date_updated": {
"$date": {
"$numberLong": "1647857527370"
}
},
"is_deleted": false,
"Order_number": {
"key": "order",
"value": "o1"
},
"Type": {
"key": "type",
"value": "pct"
},
"Selection": [{
"key": "material",
"value": "m1"
}],
"Height": {
"key": "height",
"value": "200"
},
"Width": {
"key": "width",
"value": "200"
},
"Box_width": {
"key": "box_width",
"value": ""
},
"Box_height": {
"key": "box_height",
"value": ""
},
"Length": {
"key": "running_meter",
"value": "200"
},
"Inner_bend1": {
"key": "inner_bend1",
"value": ""
},
"Inner_bend2": {
"key": "inner_bend2",
"value": ""
},
"Thickness": {
"key": "thickness",
"value": "1"
},
"Rung_width": {
"key": "rung_width",
"value": ""
},
"Rung_height": {
"key": "rung_height",
"value": ""
},
"Distance_between_rungs": {
"key": "distance_between_rungs",
"value": ""
},
"project_id": 2
}