Параметры для функции Django REST Model Model.objects.create - PullRequest
1 голос
/ 28 февраля 2020

Необходимо знать параметры для функции Model.objects.create. Этот пример по этой ссылке: https://www.django-rest-framework.org/api-guide/relations/#nested -relationships . Вот в этой строке Track.objects.create (album = album, ** track_data)

Что такое album=album? Я думаю, что значение, присвоенное правой стороне альбома, равно Album.objects.create(**validated_data), но что такое альбом левой стороны. Согласно документации это поле Модель. Но ни Model Track, ни Album contains field album`.

Это название модели по умолчанию для Album?

class TrackSerializer(serializers.ModelSerializer):
    class Meta:
        model = Track
        fields = ['order', 'title', 'duration']

class AlbumSerializer(serializers.ModelSerializer):
    tracks = TrackSerializer(many=True)

    class Meta:
        model = Album
        fields = ['album_name', 'artist', 'tracks']

    def create(self, validated_data):
        tracks_data = validated_data.pop('tracks')
        album = Album.objects.create(**validated_data)
        for track_data in tracks_data:
            Track.objects.create(album=album, **track_data)
        return album

1 Ответ

0 голосов
/ 29 февраля 2020

В учебнике явно не сказано, но предполагается, что в Track есть поле ForeignKey, называемое альбомом, которое относится к модели Album.

Обратите внимание на следующее во втором фрагменте кода внутри пример раздела:

>>> album = Album.objects.create(album_name="The Grey Album", artist='Danger Mouse')
>>> Track.objects.create(album=album, order=1, title='Public Service Announcement', duration=245)
<Track: Track object>

Это намекает на то, что я говорю. Тот факт, что на TrackSerializer отсутствует поле album, вызвало бы ошибку, если бы оно было просто Track.objects.create(**track_data), поскольку поле album отсутствовало бы. Таким образом, вам нужно включить это явно.

...