我是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)
serializers.py
class ClassesSerializer(serializers.ModelSerializer):
class = serializers.StringRelatedField(many=True)
class Meta:
model = Classes
fields = ('classes')
答案 0 :(得分:3)
您的数据库需要保持表之间的关系。您可以在此处使用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
关键字冲突。