对于具有三个对象-User
,Event
和Action
的应用,用户可以对事件进行操作以创建对象,例如:
class Action(models.Model):
event = models.ForeignKey('CauseActivity', on_delete=models.CASCADE, related_name='actions')
user = models.ForeignKey('users.User', on_delete=models.CASCADE, related_name='actions')
type = models.CharField(max_length=100, choices=ACTION_TYPES)
date_created = models.DateTimeField(auto_now_add=True)
date_updated = models.DateTimeField(auto_now=True)
我希望我们的RESTful API能够在一个用户请求内(不需要额外的API调用)或一个额外的请求(按用户获取操作)返回一个特定用户的操作
以“ actions”作为字段的简单用户序列化程序将仅返回obj id(对GET ex:"actions":[108,109]
的响应)
from rest_framework import serializers
class UserSerializer(serializers.ModelSerializer):
class Meta:
model = User
fields = (
..., 'actions', )
我知道嵌套以对username = serializers.ReadOnlyField(source='user.name')
之类的自定义字段进行序列化,但是有一种方法可以使用serializers.ListSerializer或.ModelSerializer来对{{1 }}?我通读了https://www.django-rest-framework.org/api-guide/serializers/,但对我来说,最好的方法尚不清楚。谢谢
答案 0 :(得分:0)
为您的Action
模型创建一个序列化器(我们称之为ActionSerializer
),然后使代码像
class UserSerializer(serializers.ModelSerializer):
actions = ActionSerializer(many=True)
class Meta:
model = User
fields = ('actions',...)