【问题标题】:serialize verbose fields of related foreign key object in django REST?在 django REST 中序列化相关外键对象的详细字段?
【发布时间】:2018-10-29 22:21:18
【问题描述】:

对于具有三个对象的应用程序 - 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 来序列化我的 UserSerializer 中的全部 Action 对象字段?我通读了https://www.django-rest-framework.org/api-guide/serializers/,最好的方法对我来说并不是很清楚。谢谢

【问题讨论】:

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


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-07-30
      • 2015-02-25
      • 2016-04-10
      • 1970-01-01
      • 1970-01-01
      • 2011-04-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多