сериализовать подробные поля связанного объекта внешнего ключа в django REST? - PullRequest
0 голосов
/ 30 октября 2018

для приложения с тремя объектами - 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), либо с помощью одного дополнительного запроса (получить действия пользователя)

простой пользовательский сериализатор с «действиями» в качестве поля будет возвращать только obj ids (ответ на 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 для сериализации полного набора Action полей объектов в моем UserSerializer? Я прочитал https://www.django -rest-framework.org / api-guide / serializers / , и лучший подход мне не совсем понятен. спасибо

1 Ответ

0 голосов
/ 30 октября 2018

создайте сериализатор для вашей Action модели (назовем его ActionSerializer), затем сделайте ваш код как

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