Исходное поле в сериализаторе DRF с несколькими внешними ключами для одной модели - PullRequest
0 голосов
/ 12 марта 2019

У меня модель Django выглядит следующим образом:

class Team(models.Model):
    name = models.CharField(max_length=100, unique=True)
    managers = models.ManyToManyField(User, through=MgrToTeam, related_name='mng')
    users = models.ManyToManyField(User, through=UsrToTeam,related_name='usr')

Теперь у меня есть сериализатор, в котором мне нужно отобразить всех пользователей и менеджеров, связанных с командой:

class TeamDetailSerializer(serializers.ModelSerializer):

managers = serializers.SlugRelatedField(queryset=User.objects.all(), slug_field='name')
users = serializers.SlugRelatedField(queryset=User.objects.all(), slug_field='name')

class Meta:
    model = Team
    fields = ['id', 'name', 'managers', 'users']

Однако, это дает мне одинаковый вывод как для пользователей, так и для менеджеров. Как это исправить?

Ответы [ 2 ]

2 голосов
/ 12 марта 2019

Мне интересно, почему вы хотите использовать SlugRelatedField.Предполагая, что у вас есть UserSerializer какого-то рода, будет ли работать для вас, чтобы сделать это так?

class TeamDetailSerializer(serializers.ModelSerializer):

    managers = UserSerializer(many=True)
    users = UserSerializer(many=True)

    class Meta:
        model = Team
        fields = ['id', 'name', 'managers', 'users']
0 голосов
/ 12 марта 2019

если вы просто хотите просто первичный ключ, как показано ниже

[
    {
        "id": 1,
        "name": "helo",
        "users": [
            1,
            2
        ],
        "managers":[
        1,
        2,
        ]
    }
]

class TeamDetailSerializer(serializers.ModelSerializer):

    class Meta:
        model = Team
        fields = ['id', 'name', 'users','managers']

, если вы хотите вернуть свойства объекта, как показано ниже

[
    {
        "id": 1,
        "name": "helo",
        "users": [
            {
                "email": "admin@gmail.com",
                "first_name": ""
            },
            {
                "email": "admin1@gmail.com",
                "first_name": ""
            }
        ],
        "managers": [
            {
                "email": "admin@gmail.com",
                "first_name": ""
            },
            {
                "email": "admin1@gmail.com",
                "first_name": ""
            }
        ]
    }
]

class TeamDetailSerializer(serializers.ModelSerializer):
    users = UserDetailSerializer(many=True)
    managers = UserDetailSerializer(many=True)

    class Meta:
        model = Team
        fields = ['id', 'name', 'users', 'managers']
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...