学习DRF:序列化组中的模型

学习DRF:序列化组中的模型

问题描述:

我是Django和DRF的新手。我需要通过GET公开以下JSON,但是我似乎无法让每个类都成为类的一部分[]。我相信我可以为此使用StringRelatedField,但我发现的例子似乎没有点击我。提前致谢!学习DRF:序列化组中的模型

预期输出

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

serializers.py

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

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

你的模型是什么样的? –

+0

作为输出你期望什么? –

+0

更新了糟糕的模型/序列化器。埃文斯:输出是我第一次发布(JSON) – CareFree

你的数据库需要保持你的表之间的关系。您可以在这里使用一个foreign key

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) 
    related_classes = models.ForeignKey('Classes', on_delete=models.CASCADE, related_name='classes') 

    class Meta: 
     ordering = ('id',) 

class Classes(models.Model): 
    nr = models.CharField(max_length=100) 

然后,你的串行变成:

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关键字相撞。

+0

我想我应该让你知道我也使用POST操作来填充数据库。上面的代码看起来很有希望,但是当然我创建了一个新的数据库,当我尝试向它添加数据时,我得到“related_classes”:[ “此字段是必需的。”如果我在该领域提交任何内容,它不会识别PK – CareFree

+1

您必须使用'PrimaryKeyRelatedField'序列化该字段。看看[docs](http://www.django-rest-framework.org/api-guide/relations/#primarykeyrelatedfield)就可以开始使用了。 – martinarroyo