在Django REST中序列化相关外键对象的详细字段?

时间:2018-10-29 22:21:18

标签: django django-models django-rest-framework

对于具有三个对象-UserEventAction的应用,用户可以对事件进行操作以创建对象,例如:

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/,但对我来说,最好的方法尚不清楚。谢谢

1 个答案:

答案 0 :(得分:0)

为您的Action模型创建一个序列化器(我们称之为ActionSerializer),然后使代码像

class UserSerializer(serializers.ModelSerializer):
    actions = ActionSerializer(many=True)
    class Meta:
        model = User
        fields = ('actions',...)