【问题标题】:return a nested list of one model返回一个模型的嵌套列表
【发布时间】:2018-07-15 12:40:34
【问题描述】:

我有一个查找表,其中包含单独的课程类别和子类别:

{
        "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
}}

这是我的models.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'),)

我该怎么做?以及将代码放在哪里?在序列化程序类中?

【问题讨论】:

    标签: python django django-rest-framework


    【解决方案1】:

    您需要为您的子类别实现序列化程序:

     class SubcategorySerializer(serializers.ModelSerializer):
          class Meta:
              model = Lookups
              fields = ( 'id', 'lookup', 'attr1', 'attr2', 'attr3',)
    

    并在您选择所有相关子类别时在您的类别序列化器中使用它:

     class CategorySerialier(serializers.ModelSerializer): 
          subcategories =  serializers.SerializerMethodField(read_only=True)
    
          class Meta:
              model = Lookups
              fields = ( 'id', 'lookup', 'subcagories')
    
          def get_subcategories(self, obj):
              subs = Lookups.objects.filter(attr3=obj.id)
              return SubcategorySerializer(subs,many=True).data
    

    【讨论】:

    • 我收到了那个错误:类型对象“查找”没有属性“对象”
    • 对不起 - 它应该是 -> 对象。固定。
    • @muhamadfahmy 没问题。乐于助人
    【解决方案2】:

    如果这是两个模型,一个在另一个内部序列化。 http://www.django-rest-framework.org/api-guide/relations/#nested-relationships

    【讨论】:

      猜你喜欢
      • 2013-03-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-10-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多