class Snippet(models.Model):
created = models.DateTimeField(default=ytime)
title = models.CharField(max_length=100, blank=True, default='')
code = models.TextField()
linenos = models.BooleanField(default=False)
language = models.CharField(choices=LANGUAGE_CHOICES, default='python', max_length=100)
style = models.CharField(choices=STYLE_CHOICES, default='friendly', max_length=100)
group = models.ForeignKey('Group', related_name='snippet', null=True) #建立外鍵,一定要寫上related_name
class Meta:
ordering = ('created',)
class Group(models.Model):
class_room = models.CharField(max_length=50)
number = models.IntegerField(max_length=10)
class Meta:
db_table = 'group'
class SnippetSerializers(serializers.ModelSerializer):
class Meta:
model = Snippet
fields = '__all__'
class GroupSerializers(serializers.ModelSerializer):
snippet = SnippetSerializers(read_only=True, many=True) # 外鍵的related_name,many=True不能缺少
class Meta:
model = Group
fields = '__all__'
class SnippetView(viewsets.ModelViewSet):
queryset = Snippet.objects.all()
serializer_class = SnippetSerializers
filter_class = SnippetFilter
search_fields = ('title', '=style',)
class GroupView(viewsets.ModelViewSet):
queryset = Group.objects.all()
serializer_class = GroupSerializers
這樣在訪問路由返回Group的數據時,就會包含字表中對應外鍵是Group的數據了
如下:
{
"count": 3,
"next": null,
"previous": null,
"results": [
{
"id": 1,
"snippet": [
{
"id": 1,
"created": "2019-03-04T00:00:00",
"title": "python-test",
"code": "abc",
"linenos": true,
"language": "0",
"style": 0,
"group": 1
},
{
"id": 2,
"created": "2019-03-04T06:42:18.399214",
"title": "friendly-test",
"code": "hello",
"linenos": false,
"language": "python",
"style": "friendly",
"group": 1
},
],
"class_room": "one",
"number": 10
},
{
"id": 2,
"snippet": [
{
"id": 6,
"created": "2019-03-04T09:25:24.031538",
"title": "",
"code": "how are you",
"linenos": false,
"language": "python",
"style": 1,
"group": 2
},
{
"id": 7,
"created": "2019-03-04T09:27:58.587445",
"title": "",
"code": "how are you",
"linenos": false,
"language": "python",
"style": 1,
"group": 2
},
],
"class_room": "two",
"number": 20
},
{
"id": 3,
"snippet": [
{
"id": 10,
"created": "2019-03-04T09:54:08.189380",
"title": "",
"code": "how are you",
"linenos": false,
"language": "python",
"style": 1,
"group": 3
},
{
"id": 11,
"created": "2019-03-04T09:58:32.201079",
"title": "",
"code": "how are you",
"linenos": false,
"language": "python",
"style": 1,
"group": 3
},
{
"id": 12,
"created": "2019-03-04T18:06:41",
"title": "",
"code": "hello",
"linenos": false,
"language": "python",
"style": "friendly",
"group": 3
}
],
"class_room": "three",
"number": 30
}
]
}