学习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')
你的数据库需要保持你的表之间的关系。您可以在这里使用一个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
关键字相撞。
我想我应该让你知道我也使用POST操作来填充数据库。上面的代码看起来很有希望,但是当然我创建了一个新的数据库,当我尝试向它添加数据时,我得到“related_classes”:[ “此字段是必需的。”如果我在该领域提交任何内容,它不会识别PK – CareFree
您必须使用'PrimaryKeyRelatedField'序列化该字段。看看[docs](http://www.django-rest-framework.org/api-guide/relations/#primarykeyrelatedfield)就可以开始使用了。 – martinarroyo
你的模型是什么样的? –
作为输出你期望什么? –
更新了糟糕的模型/序列化器。埃文斯:输出是我第一次发布(JSON) – CareFree