我有一个查找表,其中包含课程类别和子类别,分别为:
{
"id": 138,
"lookup": "CRS_CTGRY",
"attr1": "Arts and Humanities",
"attr2": "الفنون والعلوم الإنسانية",
"attr3": null,
"attr4": null,
"attr5": null,
"editable": 1
},
{
"id": 155,
"lookup": "CRS_SB_CTGRY",
"attr1": "Photography",
"attr2": "النصوير",
"attr3": "138",
"attr4": null,
"attr5": null,
"editable": 1
},
它们之间的关系是attr3 = id_of_the_category && attr1 = CRS_SB_CTGRY
我想将它们合并到一个列表中,例如:
{"id":138,"
"lookup":"CRS_CTRGY",
"name":"Arts and Humanities",
"subcategories":{"id": 154,
"lookup": "CRS_SB_CTGRY",
"attr1": "Music",
"attr2": "الموسيقي",
"attr3": "138",
"attr4": null,
"attr5": null,
"editable": 1
}}
这是我的模型。py:
class Lookups(models.Model):
lookup = models.CharField(max_length=45)
attr1 = models.CharField(max_length=100)
attr2 = models.CharField(max_length=100, blank=True, null=True)
attr3 = models.CharField(max_length=100, blank=True, null=True)
attr4 = models.CharField(max_length=100, blank=True, null=True)
attr5 = models.CharField(max_length=100, blank=True, null=True)
editable = models.IntegerField(blank=True, null=True)
class Meta:
managed = True
db_table = 'lookups'
unique_together = (('lookup', 'attr1', 'attr2', 'attr3', 'attr4', 'attr5'),)
我该怎么办?在哪里放置代码?在序列化程序类中?
答案 0 :(得分:0)
我真的不知道您要做什么,因为您的示例(文本)与示例(代码屏幕截图)不匹配。
从您的代码屏幕截图中可以看出,如果lookup
是CRS_CTGRY
,这是主要类别;如果lookup
是CRS_SUB_CTGRY
,则这是子类别,并将父类别ID存储在attr3
中。
现在,您希望获得此结构的字典对象。假设模型中包含所有数据:
combined = []
lookup_indices = {} # stores parents lookup for easier access.
for obj in Lookups.objects.filter(lookup='CRS_CTGY').values():
obj['subcategories'] = []
combined.append(obj)
lookup_indicies[obj.pk] = len(combined) - 1
for obj in Lookups.objects.filter(lookup='CRS_SUB_CTGRY').values():
try:
combined[lookup_indicies[int(obj['attr3'])]]['subcategories'].append(obj)
except KeyError:
print('No parent id {} found for sub cat {}'.format(obj['attr3'], obj))
print(combined)