"<Модель: ModelInstance>" должно иметь значение для поля "id", прежде чем можно будет использовать это отношение "многие-ко-многим".

В настоящее время я получаю эту ошибку между моей моделью UserProfile и моделью Song, когда пытаюсь получить все песни пользователя "song = user_prof.songs.all()" и ошибка имеет заголовок "<UserProfile: ...>". Я впервые использую сквозную модель для двух моделей (Song и Note) и у меня есть подозрения. Экземпляры UserProfile, Song, Notes и SongNotes сохраняются и доступны для просмотра в админке django, однако экземпляр song_instance не показывает никаких заметок, более того, он даже не показывает свое поле заметок, как я предполагаю, из-за сквозной модели.

Просмотр песни

class Songs(APIView):
    def post(self, request, format=None):
        try:
            data = self.request.data

            user_song = data['song']
            name = data['name']

            user = self.request.user
            user_prof = UserProfile.objects.get(user=user)

            song_instance = Song.objects.create(name=name)

            user_prof.songs.add(song_instance)
            user_prof.save()

            for index, pair in enumerate(user_song):
                note = Note.objects.create(note=pair[0], timestamp=pair[1])
                song_note_through = SongNote.objects.create(song=song_instance, note=note, order=index)

            
            song_instance.save()
            return Response({ 'success': 'Song created' })
        
        except Exception as e:
            print('Songs:post ', e, file=sys.stderr)
            return Response({ 'error': 'Unable to create song' })
    
    def get(self, request, id='all', format=None):
        try:
            if id == 'all':
                user = self.request.user
                user_prof = UserProfile(user=user)
                song = user_prof.songs.all()
            else:
                song = Song.objects.get(id=id)

            serializer = SongSerializer(song)

            return Response({ 'song': serializer.data})
        except Exception as e:
            print('Songs:get ', e, file=sys.stderr)
            return Response({ 'error': 'Unable to get song' })

models.py

class UserProfile(models.Model):
    user = models.OneToOneField(User, on_delete=models.CASCADE)
    first_name = models.CharField(max_length=255, default='')
    last_name = models.CharField(max_length=255, default='')
    posts = models.ManyToManyField('Post', blank=True, related_name='created_post')
    songs = models.ManyToManyField('Song', blank=True)
    
    
class Song(models.Model):
    id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
    name = models.CharField(max_length=100)
    notes = models.ManyToManyField('Note', through='SongNote', blank=True)

class Note(models.Model):
    note = models.CharField(max_length=500)
    timestamp = models.IntegerField(default=0)
    
class SongNote(models.Model):
    song = models.ForeignKey(Song, on_delete=models.CASCADE)
    note = models.ForeignKey(Note, on_delete=models.CASCADE)
    order = models.IntegerField()

    class Meta:
        ordering = ['order']

Я некоторое время искал информацию. Есть еще одна почта с этим вопросом, однако она не помогла. Большинство предположений сводится к тому, что я не сохраняю модель Song перед доступом к ее атрибутам, но я вижу, что они есть в панели администратора.

Вернуться на верх