Django 学习DRF:在组中序列化模型

Django 学习DRF:在组中序列化模型,django,django-rest-framework,Django,Django Rest Framework,我对Django和DRF都是新手。我需要通过GET公开以下JSON,但我似乎很难让每个类成为类[]的一部分。我相信我可以使用StringRelatedField来实现这一点,但我发现的示例似乎并不适合我。提前谢谢 预期产量 { "classes":[ { "id":24, "name":"Math 101", "starts_on":"2016-08-09", "ends_on":"2016-08-14",

我对Django和DRF都是新手。我需要通过GET公开以下JSON,但我似乎很难让每个类成为类[]的一部分。我相信我可以使用StringRelatedField来实现这一点,但我发现的示例似乎并不适合我。提前谢谢

预期产量

{
   "classes":[
      {
         "id":24,
         "name":"Math 101",
         "starts_on":"2016-08-09",
         "ends_on":"2016-08-14",
         "entries_url":"https://example.com/classes/24/classes.json"
      },
      {
         "id":23,
         "name":"English 101",
         "starts_on":"2016-07-28",
         "ends_on":"2016-07-30",
         "entries_url":"https://example.com/classes/23/classes.json"
      }
  ]
}
这是我拼凑的东西。“nr”只是一个一次性变量,因为除了来自类的数据外,我实际上不需要任何数据

model.py

class Class(models.Model):
    id = models.CharField(max_length=10)
    starts_on = models.DateTimeField(auto_now_add=False)
    ends_on = models.DateTimeField(auto_now_add=False)
    entries_url = models.CharField(max_length=150)

    class Meta:
        ordering = ('id',)

class Classes(models.Model):
    nr = models.CharField(max_length=100)
序列化程序.py

class ClassesSerializer(serializers.ModelSerializer):
    class = serializers.StringRelatedField(many=True)

    class Meta:
        model = Classes
        fields = ('classes')

数据库需要在表之间保持关系。您可以在此处使用:

然后,序列化程序变为:

class ClassSerializer(serializers.ModelSerializer):
     class Meta:
         model = Class
         fields = ['__all__']

class ClassesSerializer(serializers.ModelSerializer):
    classes = ClassSerializer(many=True)

    class Meta:
        model = Classes
        fields = ('classes',)

另外,我强烈建议您对变量使用
class
,因为它与Python的
class
关键字冲突。

您的模型看起来像什么?您希望输出是什么?更新了考虑不周的模型/序列化程序。Evans:输出是我第一次发布的(JSON)@CareFree您应该小心隐藏内置Python保留字。我会重新考虑将其命名为
Class
,这样您就不会意外地对
Class
进行阴影处理@CareFree。同时,确保单元组中有一个逗号:
字段=('classes',)
。我想我应该让您知道我也在使用POST操作来填充数据库。您上面的代码看起来非常有前途,但是,当然我创建了一个新的DB,当我尝试向其中添加数据时,我得到了“related_classes”:[“此字段是必需的。”如果我在该字段中提交任何内容,它将无法识别PK。您必须使用
PrimaryKeyRelatedField
对该字段进行序列化。请查看以开始该操作。
class ClassSerializer(serializers.ModelSerializer):
     class Meta:
         model = Class
         fields = ['__all__']

class ClassesSerializer(serializers.ModelSerializer):
    classes = ClassSerializer(many=True)

    class Meta:
        model = Classes
        fields = ('classes',)